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

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

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

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

          有這么一個場景:

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

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

          好了先說這3個吧。

          助手根據(jù)要求去找來 某某女明星A,但助手知道,導(dǎo)演老人家不會一看就看中的,所以準(zhǔn)備聯(lián)系了女明星B,女明星C.

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

          助手的工作應(yīng)變十分的好,導(dǎo)演大大的有賞!

          現(xiàn)在我們來簡單分析下:

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

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

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

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

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

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

          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 有絕世容貌(){
              嚇?biāo)缆愤呉活^牛;
              }
              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)  編輯  收藏 所屬分類: 接口的藝術(shù)

          評論:
          # re: 對面向接口編程的體會(2) 2007-05-02 14:44 | Qin Zhimou
          很好!!!
            回復(fù)  更多評論
            
          # re: 對面向接口編程的體會(2) 2007-05-03 22:03 | 擴展標(biāo)記
          對于接口我其實也不知道它那些具體的實現(xiàn)細(xì)節(jié),但我知道它的目的,而且我覺得好象我也只想也只需知道它的目的,我就簡單說吧,
          這不得不先從面向?qū)ο蟮囊粋€重要特性多態(tài)說起,簡單說多態(tài)的目的就是為能用一個統(tǒng)一的接口去實現(xiàn)(驅(qū)動)不同的實現(xiàn)(各個實現(xiàn)這個接口的類的處理函數(shù),這個處理函數(shù)就是接口里聲明但沒給出具體代碼的那個函數(shù),即名稱一樣),就好象用一個標(biāo)準(zhǔn)的三角插座就可給任何電器供電一樣。
          假設(shè)我們定義一個接口“供電系統(tǒng)”,“供電系統(tǒng)”里聲明了一個方法“三角插座()”,那么實現(xiàn)這個接口(可理解為遵循此接口協(xié)議,就好象各電器廠商都遵守國際插座標(biāo)準(zhǔn)尺寸一樣)的各種類(各類電器)就可以都只用這種統(tǒng)一化的"三角插座()"就行了。往后當(dāng)我們設(shè)計到一個想用電的類時,就可直接去接(調(diào)用)這個三角插座(),而且要注意的是任何實現(xiàn)(遵循)此接口的類都可以調(diào)用相同的“三角插座()”這個接口。
          說到此你可能覺得這個道理其實你也明白,主要是不明白于為什么java要那么做?這還得從人類這個東西說起,要知道這世界是以人類為主的,當(dāng)然什么事都要以人為本了,人類是惰性的動物,什么都圖方便,發(fā)明多態(tài)也是,你先別管它那些污七八糟的概念,其目的就是為模仿現(xiàn)實生活的,簡單說就是標(biāo)準(zhǔn)化,說穿了也還是為了方便,總之我們生活處處是標(biāo)準(zhǔn),目的也就想處處方便。回到編程領(lǐng)域也是,多態(tài)就是為達到用一個統(tǒng)一的動作(如相同的接口名)來達到驅(qū)動多種機器的目的,就好象一個標(biāo)準(zhǔn)的三角插座就可驅(qū)動所有遵守此插座協(xié)議的電器一樣,這就是目的,那么回到手段就是編譯器的事了,java采用了獨立化的接口的方式(注:有些語言并沒有突出接口的概念,比如c++的抽象也可以實現(xiàn)同樣功能),這也不過是java實現(xiàn)以上目的的手段而已,你別追究它為什么這樣,這是它的方式,你就管記住那段幾乎是固定化的實現(xiàn)接口的代碼塊。
          重申一次:弄清它的目的,別管它用什么手段,把它背下來得了。
            回復(fù)  更多評論
            

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          test html.....
          主站蜘蛛池模板: 竹山县| 河源市| 敦煌市| 霞浦县| 于都县| 乌兰县| 淮南市| 梓潼县| 太和县| 岳池县| 翁源县| 咸宁市| 肇庆市| 景德镇市| 方城县| 呼玛县| 进贤县| 大港区| 黑山县| 三江| 宣威市| 闽清县| 叶城县| 罗江县| 阿拉善左旗| 南汇区| 合川市| 东乡族自治县| 瑞丽市| 青冈县| 咸宁市| 南郑县| 张家港市| 张北县| 岱山县| 洪雅县| 雷州市| 威信县| 武山县| 阳原县| 湘西|