test html
          隨筆-10  評論-6  文章-0  trackbacks-0
          《JAVA與模式》這本書,一年前就買了,但說真的,當時真的是只看得懂字,看不明白道理!
          所以當有空時我就又拿出來翻翻,這次對于第3章的軟件可維護性與可復用性,特別有感觸!

          我也不想拋很多技術名詞出來(開-閉 原則之類的),親身經歷告訴我,如果看的人不是自己明白其中的道理,那他看多了這種名詞,就習慣的把他當口頭語來用了,已經明白的人,自然有比我更高的認識。

          所以我選擇一種比較“俗”的方式,說出我的體會。(因為我就是一俗人)

          還是回到接口上來吧,什么時候接口才能起作用?當你需要處理將來不斷變化的需要時!

          有這么一個場景:

          某導演要拍個大片,然后開會時他對助手說出要找女一號,并對女一號要求如下:

          1。全國知名女性;
          2。有絕世容貌;
          3。身材一流;

          好了先說這3個吧。

          助手根據要求去找來 某某女明星A,但助手知道,導演老人家不會一看就看中的,所以準備聯系了女明星B,女明星C.

          果然,導演開始覺得女明星A還不錯,但是沒過2天,覺得要換,(演藝圈的事誰說得清呢),這時助手馬上有B,C來代替!

          助手的工作應變十分的好,導演大大的有賞!

          現在我們來簡單分析下:

          把導演對女明星的要求作為接口的定義。
          該接口是三個特征的集合:

          1。全國知名女性;
          2。有絕市容貌;
          3。身材一流;

          導演只是根據符合這3個特征要人,而助手根據這3個特征去找人,顯然女明星 A,B,C 必須同時符合這3個特征,(也就是實現了這個接口)

          導演在不滿意  女明星 A 后,能迅速找到 B ,C 做替換,助手自然是功不可沒,但根本原因,是因為導演的要求是放在 特征的集合 上.

          試想如果導演當初是指名到姓的要誰誰做女一號,然后找來又不滿意了,要求這么具體,助手哪能那么快找來其他人代替?

          下面開始要拋點名詞了,我把這里導演的先見之明叫做 “依賴抽象”!

          public interface  女一號{

              public void 全國知明女性();
              public void 有絕世容貌();
              public void 身材一流();

          }

          public class 女明星A implements 女一號{

              public void 全國知明女性(){
               張某某;
              }
              public void 有絕世容貌(){
              貌似天仙;
              }
              public void 身材一流(){
              三圍(75c,38,80)
              }
          public class 女明星B implements 女一號{

              public void 全國知明女性(){
               某某姐姐;
              }
              public void 有絕世容貌(){
              嚇死路邊一頭牛;
              }
              public void 身材一流(){
              三圍(80d,45,95);
              }

          public class 女明星C implements 女一號{

              public void 全國知明女性(){
               某某神仙;
              }
              public void 有絕世容貌(){
               人見人愛;
              }
              public void 身材一流(){
              三圍(70c,35,80);
              }
          }






          posted on 2007-05-01 12:17 我們走在JAVA的光明大道上 閱讀(542) 評論(2)  編輯  收藏 所屬分類: 接口的藝術

          評論:
          # re: 對面向接口編程的體會(2) 2007-05-02 14:44 | Qin Zhimou
          很好!!!
            回復  更多評論
            
          # re: 對面向接口編程的體會(2) 2007-05-03 22:03 | 擴展標記
          對于接口我其實也不知道它那些具體的實現細節,但我知道它的目的,而且我覺得好象我也只想也只需知道它的目的,我就簡單說吧,
          這不得不先從面向對象的一個重要特性多態說起,簡單說多態的目的就是為能用一個統一的接口去實現(驅動)不同的實現(各個實現這個接口的類的處理函數,這個處理函數就是接口里聲明但沒給出具體代碼的那個函數,即名稱一樣),就好象用一個標準的三角插座就可給任何電器供電一樣。
          假設我們定義一個接口“供電系統”,“供電系統”里聲明了一個方法“三角插座()”,那么實現這個接口(可理解為遵循此接口協議,就好象各電器廠商都遵守國際插座標準尺寸一樣)的各種類(各類電器)就可以都只用這種統一化的"三角插座()"就行了。往后當我們設計到一個想用電的類時,就可直接去接(調用)這個三角插座(),而且要注意的是任何實現(遵循)此接口的類都可以調用相同的“三角插座()”這個接口。
          說到此你可能覺得這個道理其實你也明白,主要是不明白于為什么java要那么做?這還得從人類這個東西說起,要知道這世界是以人類為主的,當然什么事都要以人為本了,人類是惰性的動物,什么都圖方便,發明多態也是,你先別管它那些污七八糟的概念,其目的就是為模仿現實生活的,簡單說就是標準化,說穿了也還是為了方便,總之我們生活處處是標準,目的也就想處處方便。回到編程領域也是,多態就是為達到用一個統一的動作(如相同的接口名)來達到驅動多種機器的目的,就好象一個標準的三角插座就可驅動所有遵守此插座協議的電器一樣,這就是目的,那么回到手段就是編譯器的事了,java采用了獨立化的接口的方式(注:有些語言并沒有突出接口的概念,比如c++的抽象也可以實現同樣功能),這也不過是java實現以上目的的手段而已,你別追究它為什么這樣,這是它的方式,你就管記住那段幾乎是固定化的實現接口的代碼塊。
          重申一次:弄清它的目的,別管它用什么手段,把它背下來得了。
            回復  更多評論
            
          test html.....
          主站蜘蛛池模板: 扬中市| 高雄县| 澄城县| 定远县| 玉环县| 屏东市| 岚皋县| 和龙市| 冕宁县| 屯留县| 乌兰浩特市| 常宁市| 西藏| 北安市| 延庆县| 喀什市| 精河县| 三台县| 栾川县| 芜湖县| 新建县| 江源县| 三江| 松滋市| 呼玛县| 安岳县| 壶关县| 金阳县| 柘城县| 南皮县| 新蔡县| 高雄县| 南京市| 大姚县| 两当县| 临潭县| 芒康县| 唐山市| 田林县| 仁寿县| 清水县|