在更大的計劃之前,先溫習一下Design Pattern的功課。 看了《Head First Design Patterns》裡講Decorator的樣章,發現JOLT大獎不是白拿的,敘事能力之強,表達之清晰,不是那些滿腹經倫的老先生可以比的。而且整個Pattern的講述過程循序漸進,真的可以保證--小白都能學會設計模式。 可惜就只有樣章。Head First系列的電子書都不好找,只好還是翻出老先生們的書來看。 這次溫習很快做完,其實GOF80%的模式,都是基於一個原則:
優先使用對象組合,而不是類繼承.
初學OO的人,都習慣用現實世界去映射程序世界,繼承是最自然的思路。GOF其實就是在扭轉這個思路,讓大家習慣使用組合,委托和程序對象。 組合機制只要根據兩大原則,就可以變化出絕大部分的GOF模式. 1.任何耦合都可以通過增加一個中間層來解耦 代表模式有: Facade , Mediator , Adapter 和 Factory/Abstract Factory , Proxy 2.通過組合來擴充對象特性,可以避免純繼承引起的類爆炸 代表模式有: Bridge , Decorator , Chain of Response , Strategy/Command
3.另外還有些獨立的常用模式如Singleton , Visitor , Observe
寫給自己看的重放慢鏡: 1.Facade : 為了減低一個系統和另一個系統的內部類之間的耦合性。建立對象A代理系統的主要功能
2.Mediator:為了減低兩個對象之間的耦合性。建立一個中間對象C,同時具有A和B的實例,並把C賦給A和B
3.Adapter: 為了匹配不同的對象使用同一接口。建立對象B,代理A的方法並使其接口匹配。
4.factory: 為了不依賴於具體對象而依賴於接口的創建對象。程序通過Factory獲得對象。
5.Proxy: 除了不依賴於具體對象,還能在過程中插入動作.程序通過Proxy調用對象的方法(AOP)
6.Bridge: 如果對象特征向兩個方向發展,Bridge能夠避免兩組對象特征的排列組合引起類爆炸。一組特征如大杯、中杯,一組特征如加奶、加糖。把其中一組特征抽象分離為接口2,把接口2的實例傳入到主繼承樹中。
7.Decorator: 通過包裹原對象,為原對象的動作添加新的動作。新類繼承於原類,有原類同樣的方法和原類的實體調用新類的方法時,會調用原類實體的原方法,再加上新類對其的擴展。
8.COR: 通過安排職責鏈,讓各對象根據情況添加自己的動作。每個對象都有下一個對象的指針,根據情況完成自己的操作後,把控制傳給下一位。Apahce Jarkarta Commands有chains庫。
9.Strategy/Command: Template模式的對立物,把動作封裝為對象進行組合。
10.Observe: 通過一套機制,監控Observebal對象的狀態變化。JDK實現了兩套接口進行輔助。
11.Visitor: 通過一套機制,讓獨立對象遍歷組合裡的所有對象,執行共同的動作。被訪問對象有個accept(訪問者)函數,在函數裡面調用訪問者.訪問(this),不算很優雅的一個模式。