設(shè)計模式
設(shè)計模式是描述了一個在我們周圍不斷重復發(fā)生的問題,以及該問題的解決方案的核心。這樣我們就可以對于同樣的問題使用同樣的解決辦法。
為什么要有設(shè)計模式呢?因為軟件設(shè)計本身復雜性大醒串,復雜的根本原因在于變化,包括需求的變化鄙皇,平臺的變化芜赌,環(huán)境的變化等。
如何解決復雜性呢伴逸? 常用的解決辦法有分解和抽象缠沈。分解是分而治之,將大問題分解為多個小問題错蝴,將復雜問題分解為多個簡單的問題洲愤。抽象是更高層次的一種通用技術(shù)。由于不能掌握全部的復雜對象顷锰,我們選擇忽視它的非本質(zhì)細節(jié)柬赐,而去處理泛化和理想化了的對象模型。
面向?qū)ο笤O(shè)計原則
變化是復用的天敵官紫,面向?qū)ο笤O(shè)計的最大優(yōu)勢在于:抵御變化肛宋。
理解面向?qū)ο罂梢园齻€層面的意思:1)理解隔離變化 2)類各司其職 3)對象的含義(從語言實現(xiàn)層面來看,對象封裝了數(shù)據(jù)和代碼束世;從規(guī)格層面講悼吱,對象是一系列可被使用的公共接口;從概念層面講良狈,對象是某種擁有責任的抽象)
面向?qū)ο笤O(shè)計的 8 大原則:
- 依賴倒置原則
- 開發(fā)封閉原則
- 單一職責原則
- Liskov替換原則
- 接口隔離原則
- 優(yōu)先使用對象組合,而不是繼承
- 封裝變化點
- 針對接口編程笨枯,而不是針對實現(xiàn)編程
設(shè)計模式的分類
從目的來看薪丁,可分為創(chuàng)建型遇西,結(jié)構(gòu)型,行為型严嗜。從范圍來看粱檀,可分為類模式處理類與子類的靜態(tài)關(guān)系;對象模式處理對象間的動態(tài)關(guān)系漫玄。
從封裝變化角度對模式分類:
組件協(xié)作: Template Method, Strategy, Observer/ Event
單一職責: Decotator, Bridge
對象創(chuàng)建: Factory Method, Abstruct Factory, Prototype, Builder
對象性能: Sigleton, Flyweight
接口隔離: Facede, Proxy, Mediator, Adapter
狀態(tài)變化: Memento, State
數(shù)據(jù)結(jié)構(gòu): Composite, Iterator, Chain of Resposibility
行為變化: Command, Visitor
領(lǐng)域問題: Interpreter
重構(gòu)關(guān)鍵技法:
- 靜態(tài) -> 動態(tài)
- 早綁定 -> 晚綁定
- 繼承 -> 組合
- 編譯時依賴 -> 運行時依賴
- 緊耦合 -> 松耦合