此文出處:http://www.javaeye.com/topic/41096
每個程序員都應牢記的7種壞味道,11種原則,23種模式
(一)7種設(shè)計壞味道
1.僵化性: 很難對系統(tǒng)進行改動,因為每個改動都會迫使許多對系統(tǒng)其他部分的其它改動。
2.脆弱性: 對系統(tǒng)的改動會導致系統(tǒng)中和改動的地方在概念上無關(guān)的許多地方出現(xiàn)問題。
3.牢固性: 很難解開系統(tǒng)的糾結(jié),使之成為一些可在其他系統(tǒng)中重用的組件。
4.粘滯性: 做正確的事情比做錯誤的事情要困難。
5.復雜性(不必要的): 設(shè)計中包含有不具任何直接好處的基礎(chǔ)結(jié)構(gòu)。
6.重復性(不必要的): 設(shè)計中包含有重復的結(jié)構(gòu),而該重復的結(jié)構(gòu)本可以使用單一的抽象進行統(tǒng)一。
7.晦澀性: 很難閱讀、理解。沒有很好地表現(xiàn)出意圖。
(二)11種原則 - Principle
----類原則
1.單一職責原則 - Single Responsibility Principle(SRP)
就一個類而言,應該僅有一個引起它變化的原因。
(職責即為“變化的原因”。)
2.開放-封閉原則 - Open Close Principle(OCP)
軟件實體(類、模塊、函數(shù)等)應該是可以擴展的,但是不可修改。
(對于擴展是開放的,對于更改是封閉的.
關(guān)鍵是抽象.將一個功能的通用部分和實現(xiàn)細節(jié)部分清晰的分離開來.
開發(fā)人員應該僅僅對程序中呈現(xiàn)出頻繁變化的那些部分作出抽象.
拒絕不成熟的抽象和抽象本身一樣重要. )
3.里氏替換原則 - Liskov Substitution Principle(LSP)
子類型(subclass)必須能夠替換掉它們的基類型(superclass)。
4.依賴倒置原則(IoCP) 或 依賴注入原則 - Dependence Inversion Principle(DIP)
抽象不應該依賴于細節(jié)。細節(jié)應該依賴于抽象。
(Hollywood原則: "Don't call us, we'll call you".
程序中所有的依賴關(guān)系都應該終止于抽象類和接口。
針對接口而非實現(xiàn)編程。
任何變量都不應該持有一個指向具體類的指針或引用。
任何類都不應該從具體類派生。
任何方法都不應該覆寫他的任何基類中的已經(jīng)實現(xiàn)了的方法。)
5.接口隔離原則(ISP)
不應該強迫客戶依賴于它們不用的方法。
接口屬于客戶,不屬于它所在的類層次結(jié)構(gòu)。
(多個面向特定用戶的接口勝于一個通用接口。)
----包內(nèi)聚原則
6.重用發(fā)布等價原則(REP)
重用的粒度就是發(fā)布的粒度。
7.共同封閉原則(CCP)
包中的所有類對于同一類性質(zhì)的變化應該是共同封閉的。
一個變化若對一個包產(chǎn)生影響,
則將對該包中的所有類產(chǎn)生影響,
而對于其他的包不造成任何影響。
8.共同重用原則(CRP)
一個包中的所有類應該是共同重用的。
如果重用了包中的一個類,
那么就要重用包中的所有類。
(相互之間沒有緊密聯(lián)系的類不應該在同一個包中。)
----包耦合原則
9.無環(huán)依賴原則(ADP)
在包的依賴關(guān)系圖中不允許存在環(huán)。
10.穩(wěn)定依賴原則(SDP)
朝著穩(wěn)定的方向進行依賴。
應該把封裝系統(tǒng)高層設(shè)計的軟件(比如抽象類)放進穩(wěn)定的包中,
不穩(wěn)定的包中應該只包含那些很可能會改變的軟件(比如具體類)。
11.穩(wěn)定抽象原則(SAP)
包的抽象程度應該和其穩(wěn)定程度一致。
(一個穩(wěn)定的包應該也是抽象的,一個不穩(wěn)定的包應該是抽象的. )
----其它擴展原則----
12.BBP(Black Box Principle)黑盒原則
多用類的聚合,少用類的繼承。
13.DAP(Default Abstraction Principle)缺省抽象原則
在接口和實現(xiàn)接口的類之間引入一個抽象類,這個類實現(xiàn)了接口的大部分操作.
14.IDP(Interface Design Principle)接口設(shè)計原則
規(guī)劃一個接口而不是實現(xiàn)一個接口。
15.DCSP(Don't Concrete Supperclass Principle)不要構(gòu)造具體的超類原則
避免維護具體的超類。
16.迪米特法則
一個類只依賴其觸手可得的類。
(三)23種設(shè)計模式 - Pattern.
創(chuàng)建型
Abstract Factory(抽象工廠模式) -> (簡單工廠模式)
Factory Method(工廠模式)
Builder(生成器模式)
Singleton(單件模式) -> (多例模式)
Prototype(原型模式)
結(jié)構(gòu)型
Adapter(適配器模式)
Bridge(橋接模式)
Composite(組合模式)
Decorator(裝飾模式)
Facade(外觀模式,門面模式)
Flyweight(享元模式) -> (不變模式)
Proxy(代理模式)
行為型
Chain of Responsibility(職責鏈模式)
Command(命令模式)
Interpreter(解釋器模式)
Iteartor(迭代器模式)
Mediator(中介者模式)
Memento(備忘錄模式)
Observer(觀察者模式)
State(狀態(tài)模式)
Strategy(策略模式)
TemplateMethod(模板方法模式)
Visitor(訪問者模式)