Sealyu

          --- 博客已遷移至: http://www.sealyu.com/blog

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            618 隨筆 :: 87 文章 :: 225 評論 :: 0 Trackbacks
          <2009年12月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          常用鏈接

          留言簿(14)

          隨筆分類

          隨筆檔案

          友情鏈接

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          這篇文章,不需要你一次就看懂,如果你真的能一次都看懂,我想設(shè)計模式對于你來說 已經(jīng)沒什么難度了..因為設(shè)計模式就是要體現(xiàn)這些原則的,你可以把設(shè)計原則看做是一門語言,設(shè)計模式是由這些語言編碼的程序..你既然已經(jīng)明白,精通了語 言,剩下的編碼自然是很簡單的事情,編碼的越多則經(jīng)驗越多,經(jīng)驗越多則對原則的理解就越深...這是一個學(xué)習(xí)領(lǐng)悟的過程..

               我希望這篇文章能幫助新人感受到設(shè)計模式的樂趣,避免重復(fù)編 碼....減少勞動量..如果你能在用心靜靜的體會文章的每個字,每段話的意思,這樣可以避免走很多彎路...我以前學(xué)習(xí)設(shè)計模式的時候,就是因為忽略了 原則,憑著感覺,看著書來學(xué)習(xí)設(shè)計模式,結(jié)果就是知其然而不知其所以然....如果你是初學(xué)設(shè)計模式,再了解了OOP的三大原則(封套,繼承,多態(tài))之 后,請反復(fù)的結(jié)合原則,來學(xué)習(xí)設(shè)計模式..這樣可以達到事半功倍的效果...
            
               設(shè)計模式的核心原則是:"開-閉"原則(  Open - Closed Principle 縮寫:OCP  ),一切的一切都是圍繞著"開-閉"原則展開的..
               意思是,在一個系統(tǒng)中,對于擴展是開放的,對于修改是關(guān)閉的,一個好的系統(tǒng)是在不修改源代碼的情況下,可以擴展你的功能..而實現(xiàn)開閉原則的關(guān)鍵就是抽象化.
               在"開-閉"原則中,不允許修改的是抽象的類或者接口,允許擴展的是具體的實現(xiàn)類,抽象類和接口在"開-閉"原則中扮演著極其重要的角色..即要預(yù)知可能變化的需求.又預(yù)見所有可能已知的擴展..所以在這里"抽象化"是關(guān)鍵!!!

                可變性的封閉原則:找到系統(tǒng)的可變因素,將它封裝起來..這是 對"開-閉"原則最好的實現(xiàn)..不要把你的可變因素放在多個類中,或者散落在程序的各個角落..你應(yīng)該將可變的因素,封套起來..并且切忌不要把所用的可 變因素封套在一起..最好的解決辦法是,分塊封套你的可變因素!!避免超大類,超長類,超長方法的出現(xiàn)!!給你的程序增加藝術(shù)氣息,將程序藝術(shù)化是我們的 目標!!

                里氏代換原則:任何基類可以出現(xiàn)的地方,子類也可以出現(xiàn)..如果你通讀過<Java編程思想>,我想你應(yīng)該明白這個原則,在書中,Bruce Eckel 大師用了大量的章節(jié)來講解"向上轉(zhuǎn)型"和"向下轉(zhuǎn)型",我想目的很清楚,不僅是要你明白類的型別,更重要的是要你明白父類與子類的關(guān)系..

                依賴倒轉(zhuǎn)原則:要依賴抽象,而不要依賴具體的實現(xiàn)..如 果說開閉原則是目標,依賴倒轉(zhuǎn)原則是到達"開閉"原則的手段..如果要達到最好的"開閉"原則,就要盡量的遵守依賴倒轉(zhuǎn)原則..可以說依賴倒轉(zhuǎn)原則是對" 抽象化"的最好規(guī)范!!我個人感覺,依賴倒轉(zhuǎn)原則也是里氏代換原則的補充..你理解了里氏代換原則,再來理解依賴倒轉(zhuǎn)原則應(yīng)該是很容易的..
            合成/聚合原則:要盡量使用合成/聚合原則,而不是繼承關(guān)系達到軟件復(fù)用的目的..此原則和里氏代換原則氏相輔相成的,兩者都是具體實現(xiàn)"開-閉"原則的規(guī)范..違反這一原則:就無法實現(xiàn)"開-閉"原則..先來看看什么是合成,什么是聚合.

                什么是合成?
               合成:是指一個整體對依托他而存在的關(guān)系,例如:一個人對他的房子和家具,其中他的房子和家具是不能被共享的,因為那些東西都是他自己的..并且人沒了, 這個也關(guān)系就沒了..這個例子就好像,烏雞百鳳丸這個產(chǎn)品,它是有烏雞和上等藥材合成而來的一樣..也比如網(wǎng)絡(luò)游戲中的武器裝備合成一樣,多種東西合并為 一種超強的東西一樣..
                
                什么是聚合?
                聚合:聚合是比合成關(guān)系的一種更強的依賴關(guān)系,聚合是一個整體對個體的部分,例如,一個奔馳S360汽車,對奔馳S360引擎,奔馳S360輪胎的關(guān) 系..這些關(guān)系就是帶有聚合性質(zhì)的..因為奔馳S360引擎和奔馳S360輪胎他們只能被奔馳S360汽車所用,離開了奔馳S360汽車,它們就失去了存 在的意義..在我們的設(shè)計中,這樣的關(guān)系不應(yīng)該頻繁出現(xiàn)..這樣會增大設(shè)計的耦合度..
                明白了合成和聚合關(guān)系,再來理解合成/聚合原則應(yīng)該就清楚了..要避免在系統(tǒng)設(shè)計中出現(xiàn),一個類的繼承層次超過3次..如果這樣的話,可以考慮重構(gòu)你的代碼,或者重新設(shè)計結(jié)構(gòu)..當(dāng)然最好的辦法就是考慮使用合成/聚合原則...

                迪米特法則:系統(tǒng)中的類,盡量不要與其他類互相作用,減少類之間的耦合度, 因為在你的系統(tǒng)中,擴展的時候,你可能需要修改這些類,而類與類之間的關(guān)系,決定了修改的復(fù)雜度,相互作用越多,則修改難度就越大,反之,如果相互作用的 越小,則修改起來的難度就越小..例如A類依賴B類,則B類依賴C類,當(dāng)你在修改A類的時候,你要考慮B類是否會受到影響,而B類的影響是否又會影響到C 類..如果此時C類再依賴D類的話,呵呵,我想這樣的修改有的受了..

               接口隔離法則:這個法則與迪米特法則是相通的,迪米特法則是目的,而接口隔離法則是對迪米特法則的規(guī)范..為了做到盡可能小的耦合性,我們需要使用接口來規(guī)范類,用接口來約束類.要達到迪米特法則的要求,最好就是實現(xiàn)接口隔離法則,實現(xiàn)接口隔離法則,你也就滿足了迪米特法則...
              
           
                 如果你能看這里,說明你已經(jīng)對這些原則了有了感性的認識..這些原則是設(shè)計模式的核心,如果不能充分理解這些原則,是很難理解好設(shè)計模式的..

                如果第一遍看不懂,沒關(guān)系,請反復(fù)揣摩,細讀每個字,每句話..對于這些原則,我也是看了N*N遍才明白的(這期間也沒任何人指點過我,更每人講的這么細,獎勵自己一下先, 汗啊)..我推薦看完原則之后,請看設(shè)計模式,看兩三個模式,然后理解一下,自己動手把模式實現(xiàn)出來,再回頭來看原則,你會感覺,你的模式一定是滿足了其 中的某些原則!!這是必然的!!只要你理解了原則,設(shè)計模式不難理解..就好比,有了內(nèi)功基礎(chǔ)的你,再來學(xué)習(xí)刀,劍,槍這些武器的時候,要比那些直接學(xué)習(xí) 刀,槍,劍的人,快很多,效果也好很多...

              如果你要了解設(shè)計模式,在園子里也有N多好的設(shè)計模式文章,精華區(qū)的設(shè)計模式區(qū)..有很多都是不錯的介紹文章..另外近段時間,我也在發(fā)表關(guān)于設(shè)計模式的心得..如果有興趣,可以關(guān)注一下...

          posted on 2009-12-23 15:34 seal 閱讀(254) 評論(0)  編輯  收藏 所屬分類: 設(shè)計模式
          主站蜘蛛池模板: 昌邑市| 衡水市| 岱山县| 墨玉县| 隆尧县| 蒙阴县| 井冈山市| 梁河县| 通化县| 黄山市| 榆中县| 伊金霍洛旗| 共和县| 板桥市| 万全县| 元江| 迭部县| 广汉市| 枣阳市| 合江县| 铜陵市| 开化县| 外汇| 开江县| 张家港市| 黄浦区| 沙雅县| 靖安县| 伊宁县| 习水县| 大洼县| 应城市| 津南区| 滕州市| 天峻县| 门源| 伊金霍洛旗| 新龙县| 六盘水市| 清涧县| 新源县|