當(dāng)前訪問本站: hits

          yjhmily

          堅(jiān)持走自己的路……

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            100 Posts :: 8 Stories :: 353 Comments :: 0 Trackbacks

          此文出處:http://www.javaeye.com/topic/41096

          每個(gè)程序員都應(yīng)牢記的7種壞味道,11種原則,23種模式

          (一)7種設(shè)計(jì)壞味道
          1.僵化性: 很難對(duì)系統(tǒng)進(jìn)行改動(dòng),因?yàn)槊總€(gè)改動(dòng)都會(huì)迫使許多對(duì)系統(tǒng)其他部分的其它改動(dòng)。
          2.脆弱性: 對(duì)系統(tǒng)的改動(dòng)會(huì)導(dǎo)致系統(tǒng)中和改動(dòng)的地方在概念上無關(guān)的許多地方出現(xiàn)問題。
          3.牢固性: 很難解開系統(tǒng)的糾結(jié),使之成為一些可在其他系統(tǒng)中重用的組件。
          4.粘滯性: 做正確的事情比做錯(cuò)誤的事情要困難。
          5.復(fù)雜性(不必要的): 設(shè)計(jì)中包含有不具任何直接好處的基礎(chǔ)結(jié)構(gòu)。
          6.重復(fù)性(不必要的): 設(shè)計(jì)中包含有重復(fù)的結(jié)構(gòu),而該重復(fù)的結(jié)構(gòu)本可以使用單一的抽象進(jìn)行統(tǒng)一。
          7.晦澀性: 很難閱讀、理解。沒有很好地表現(xiàn)出意圖。

          (二)11種原則 - Principle
          ----類原則
          1.單一職責(zé)原則 - Single Responsibility Principle(SRP)
          就一個(gè)類而言,應(yīng)該僅有一個(gè)引起它變化的原因。
          (職責(zé)即為“變化的原因”。)
          2.開放-封閉原則 - Open Close Principle(OCP)
          軟件實(shí)體(類、模塊、函數(shù)等)應(yīng)該是可以擴(kuò)展的,但是不可修改。
          (對(duì)于擴(kuò)展是開放的,對(duì)于更改是封閉的.
          關(guān)鍵是抽象.將一個(gè)功能的通用部分和實(shí)現(xiàn)細(xì)節(jié)部分清晰的分離開來.
          開發(fā)人員應(yīng)該僅僅對(duì)程序中呈現(xiàn)出頻繁變化的那些部分作出抽象.
          拒絕不成熟的抽象和抽象本身一樣重要. )
          3.里氏替換原則 - Liskov Substitution Principle(LSP)
          子類型(subclass)必須能夠替換掉它們的基類型(superclass)。
          4.依賴倒置原則(IoCP) 或 依賴注入原則 - Dependence Inversion Principle(DIP)
          抽象不應(yīng)該依賴于細(xì)節(jié)。細(xì)節(jié)應(yīng)該依賴于抽象。
          (Hollywood原則: "Don't call us, we'll call you".
          程序中所有的依賴關(guān)系都應(yīng)該終止于抽象類和接口。
          針對(duì)接口而非實(shí)現(xiàn)編程。
          任何變量都不應(yīng)該持有一個(gè)指向具體類的指針或引用。
          任何類都不應(yīng)該從具體類派生。
          任何方法都不應(yīng)該覆寫他的任何基類中的已經(jīng)實(shí)現(xiàn)了的方法。)
          5.接口隔離原則(ISP)
          不應(yīng)該強(qiáng)迫客戶依賴于它們不用的方法。
          接口屬于客戶,不屬于它所在的類層次結(jié)構(gòu)。
          (多個(gè)面向特定用戶的接口勝于一個(gè)通用接口。)
          ----包內(nèi)聚原則
          6.重用發(fā)布等價(jià)原則(REP)
          重用的粒度就是發(fā)布的粒度。
          7.共同封閉原則(CCP)
          包中的所有類對(duì)于同一類性質(zhì)的變化應(yīng)該是共同封閉的。
          一個(gè)變化若對(duì)一個(gè)包產(chǎn)生影響,
          則將對(duì)該包中的所有類產(chǎn)生影響,
          而對(duì)于其他的包不造成任何影響。
          8.共同重用原則(CRP)
          一個(gè)包中的所有類應(yīng)該是共同重用的。
          如果重用了包中的一個(gè)類,
          那么就要重用包中的所有類。
          (相互之間沒有緊密聯(lián)系的類不應(yīng)該在同一個(gè)包中。)
          ----包耦合原則
          9.無環(huán)依賴原則(ADP)
          在包的依賴關(guān)系圖中不允許存在環(huán)。
          10.穩(wěn)定依賴原則(SDP)
          朝著穩(wěn)定的方向進(jìn)行依賴。
          應(yīng)該把封裝系統(tǒng)高層設(shè)計(jì)的軟件(比如抽象類)放進(jìn)穩(wěn)定的包中,
          不穩(wěn)定的包中應(yīng)該只包含那些很可能會(huì)改變的軟件(比如具體類)。
          11.穩(wěn)定抽象原則(SAP)
          包的抽象程度應(yīng)該和其穩(wěn)定程度一致。
          (一個(gè)穩(wěn)定的包應(yīng)該也是抽象的,一個(gè)不穩(wěn)定的包應(yīng)該是抽象的. )
          ----其它擴(kuò)展原則----
          12.BBP(Black Box Principle)黑盒原則
          多用類的聚合,少用類的繼承。
          13.DAP(Default Abstraction Principle)缺省抽象原則
          在接口和實(shí)現(xiàn)接口的類之間引入一個(gè)抽象類,這個(gè)類實(shí)現(xiàn)了接口的大部分操作.
          14.IDP(Interface Design Principle)接口設(shè)計(jì)原則
          規(guī)劃一個(gè)接口而不是實(shí)現(xiàn)一個(gè)接口。
          15.DCSP(Don't Concrete Supperclass Principle)不要構(gòu)造具體的超類原則
          避免維護(hù)具體的超類。
          16.迪米特法則
          一個(gè)類只依賴其觸手可得的類。

          (三)23種設(shè)計(jì)模式 - Pattern.
          創(chuàng)建型
          Abstract Factory(抽象工廠模式) -> (簡單工廠模式)
          Factory Method(工廠模式)
          Builder(生成器模式)
          Singleton(單件模式) -> (多例模式)
          Prototype(原型模式)
          結(jié)構(gòu)型
          Adapter(適配器模式)
          Bridge(橋接模式)
          Composite(組合模式)
          Decorator(裝飾模式)
          Facade(外觀模式,門面模式)
          Flyweight(享元模式) -> (不變模式)
          Proxy(代理模式)
          行為型
          Chain of Responsibility(職責(zé)鏈模式)
          Command(命令模式)
          Interpreter(解釋器模式)
          Iteartor(迭代器模式)
          Mediator(中介者模式)
          Memento(備忘錄模式)
          Observer(觀察者模式)
          State(狀態(tài)模式)
          Strategy(策略模式)
          TemplateMethod(模板方法模式)
          Visitor(訪問者模式)

          posted on 2006-12-28 09:42 kangxm 閱讀(930) 評(píng)論(0)  編輯  收藏 所屬分類: 轉(zhuǎn)載篇
          主站蜘蛛池模板: 梅河口市| 雷波县| 延长县| 衡山县| 舞钢市| 河东区| 汾西县| 赤壁市| 密云县| 韶关市| 五指山市| 湾仔区| 潮州市| 治县。| 贞丰县| 健康| 满洲里市| 新巴尔虎右旗| 甘德县| 广平县| 大姚县| 平舆县| 武平县| 彰化市| 永兴县| 淮北市| 呼伦贝尔市| 厦门市| 乐东| 余姚市| 洛南县| 晋城| 乐业县| 道真| 淮阳县| 陕西省| 木兰县| 新泰市| 桂平市| 祁东县| 南川市|