依賴倒轉(zhuǎn)原則

          依賴倒轉(zhuǎn)原則?【 Dependency Inversion Principle(DIP)

          ??? ? 就是在我們編程的時(shí)候方法的參數(shù)類型,變量,對(duì)于其他具體類的依賴,我們盡量的使用抽象類。
          就是說盡量依賴于抽象,而不是依賴于實(shí)現(xiàn)。?
          ???
          ? 在書中兩種表述:
          ???? (1),Abstraction should not depend on details.details should depend on abstraction. (抽象不應(yīng)當(dāng)依賴于細(xì)節(jié),細(xì)節(jié)應(yīng)當(dāng)依賴于抽象)。Abstraction就像是建筑物的基礎(chǔ),而其實(shí)現(xiàn)類就是在基礎(chǔ)上面一層一層的往上面走。你拆掉最上面那層,和拿走最下面的基礎(chǔ),有什么不同了,這就是差異了。所以Abstraction是要相當(dāng)?shù)姆€(wěn)定,是維護(hù)的重點(diǎn)。也正是因?yàn)榉€(wěn)定,所以我們盡量的依賴于Abstraction,既是穩(wěn)定系統(tǒng),也是靈活系統(tǒng)。?
          ???
          ? (2),Program to an Interface,not an implementation(要針對(duì)接口編程,不要針對(duì)實(shí)現(xiàn)編程)
          ???? 應(yīng)當(dāng)使用java接口和抽象java類進(jìn)行變量的類型聲明,參數(shù)的類型聲明,方法返回值的類型和數(shù)據(jù)類型的轉(zhuǎn)換。?
          ???


          在這里我就有一個(gè)問題了。
          ???? List l= new Vector();而不要使用 Vector l=new Vector();我就有疑問 如果我一個(gè)類B 繼承于類A,B有一些A不存在的方法,而我的方法中我得使用B,這里那就菜了。
          ?? 所以看到這句話了。保證做到這點(diǎn),一個(gè)具體的類應(yīng)當(dāng)只實(shí)現(xiàn)Java接口,和抽象java類中聲明過的方法,而不應(yīng)當(dāng)給出多余的方法。
          ??????
          ?? 依賴倒裝原則是很難實(shí)現(xiàn)的,在這些原則中,因?yàn)閺纳厦嬉部梢钥吹健_€是使用了Vector類這個(gè)具體的類,還是對(duì)具體的類有依賴,所以,對(duì)于依賴倒裝的創(chuàng)建new Vector(),有一個(gè)專門的模式,工廠模式,不過只是把違反這個(gè)原則的地方壓縮到一個(gè)類里面。

          posted on 2009-07-02 22:59 luofeng225 閱讀(1160) 評(píng)論(3)  編輯  收藏 所屬分類: 設(shè)計(jì)模式

          評(píng)論

          # re: 依賴倒轉(zhuǎn)原則 2009-08-31 17:52 郭克

          如果滿足LSP原則就不會(huì)有你說的問題了。你覺得呢?

          里氏代換原則
            里氏代換原則(Liskov Substitution Principle LSP)面向?qū)ο笤O(shè)計(jì)的基本原則之一。
            里氏代換原則中說,任何基類可以出現(xiàn)的地方,子類一定可以出現(xiàn)。 LSP是繼承復(fù)用的基石,只有當(dāng)衍生類可以替換掉基類,軟件單位的功能不受到影響時(shí),基類才能真正被復(fù)用,而衍生類也能夠在基類的基礎(chǔ)上增加新的行為。
            回復(fù)  更多評(píng)論   

          # re: 依賴倒轉(zhuǎn)原則 2010-05-17 13:34 翟云祥

          JAVA API中違反設(shè)計(jì)模式的地方也很多,所以對(duì)用戶的使用造成了麻煩,如果Vector類只想開放其個(gè)性的方法,完全可以把這些方法抽象成為一個(gè)接口,這樣不就實(shí)現(xiàn)了依賴倒轉(zhuǎn)原則了么。。。  回復(fù)  更多評(píng)論   

          # re: 依賴倒轉(zhuǎn)原則 2010-05-17 13:38 翟云祥

          還有就是可以根據(jù)聚合/合并原則,自己寫一個(gè)符合自己意圖的類,合理的使用繼承  回復(fù)  更多評(píng)論   

          <2010年5月>
          2526272829301
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          導(dǎo)航

          統(tǒng)計(jì)

          公告

          我曾經(jīng)聽到這么一個(gè)故事: 一個(gè)年輕的程序員問一個(gè)老程序員(一個(gè)比較牛逼的公司的CTO) 年輕程序員: 你為什么這么牛X., 就好像沒有你不會(huì)的。老程序員: 積累的。年輕程序員: 怎么才能積累到您的程度呢。我每天都在積累。但是似乎都沒有感覺到進(jìn)步。老程序員: 我從20歲開始做到了一件事情,直到今天,而且盡可能地保證不間斷。年輕程序員: 到底是什么? 老程序員: 我每天保證自己有2個(gè)小時(shí)在學(xué)習(xí)新的東西。

          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          文章分類

          相冊(cè)

          收藏夾

          Java Website

          java技術(shù)博客

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 勐海县| 鲜城| 凉城县| 温泉县| 襄城县| 永靖县| 墨玉县| 汉阴县| 肇庆市| 普宁市| 曲靖市| 安顺市| 沂源县| 清丰县| 株洲县| 漯河市| 宁波市| 正镶白旗| 富阳市| 白水县| 马鞍山市| 迁西县| 耒阳市| 仁布县| 元江| 双城市| 梅州市| 襄垣县| 鄢陵县| 湘潭县| 尼勒克县| 河津市| 巴林左旗| 兴和县| 林西县| 中西区| 三原县| 瓮安县| 天门市| 周宁县| 辽阳县|