最近牌废,我在看Head First設計模式廉侧。這本書寫的非常棒页响,讀的過程中總有“原來代碼還可以這樣設計”的感覺,對我有醍醐灌頂?shù)墓πФ翁埽瑯O力推薦大家閱讀看看拘泞。不過在讀完全書之后發(fā)現(xiàn)好多模式的概念和使用場景都忘了,或者已經(jīng)記得不清晰了枕扫,為了方便日后的學習與記憶,在此進行了一番整理辱魁。
設計模式的六大原則:
1烟瞧、單一職責原則(Single Responsibility Principle)
就一個類而言,應該僅有一個引起它變化的原因染簇。簡單地說就是一個類只做一件事参滴。
2、開閉原則(Open Close Principle)
開閉原則就是說對擴展開放锻弓,對修改關閉砾赔。在程序需要進行拓展的時候,不能去修改原有的代碼青灼,實現(xiàn)一個熱插拔的效果暴心。所以一句話概括就是:為了使程序的擴展性好,易于維護和升級杂拨。想要達到這樣的效果专普,我們需要使用接口和抽象類。
3弹沽、里氏代換原則(Liskov Substitution Principle)
里氏代換原則面向對象設計的基本原則之一檀夹。 里氏代換原則中說筋粗,任何基類可以出現(xiàn)的地方,子類一定可以出現(xiàn)炸渡。 LSP是繼承復用的基石娜亿,只有當衍生類可以替換掉基類,軟件單位的功能不受到影響時蚌堵,基類才能真正被復用买决,而衍生類也能夠在基類的基礎上增加新的行為。里氏代換原則是對“開-閉”原則的補充辰斋。實現(xiàn)“開-閉”原則的關鍵步驟就是抽象化策州。而基類與子類的繼承關系就是抽象化的具體實現(xiàn),所以里氏代換原則是對實現(xiàn)抽象化的具體步驟的規(guī)范宫仗」还遥—— From Baidu 百科
4、依賴倒轉原則(Dependence Inversion Principle)
這個是開閉原則的基礎藕夫,具體內容:真對接口編程孽糖,依賴于抽象而不依賴于具體。
5毅贮、接口隔離原則(Interface Segregation Principle)
這個原則的意思是:使用多個隔離的接口办悟,比使用單個接口要好。還是一個降低類之間的耦合度的意思滩褥,從這兒我們看出病蛉,其實設計模式就是一個軟件的設計思想,從大型軟件架構出發(fā)瑰煎,為了升級和維護方便铺然。所以上文中多次出現(xiàn):降低依賴,降低耦合酒甸。
6魄健、迪米特法則(最少知道原則)(Demeter Principle)
為什么叫最少知道原則,就是說:一個實體應當盡量少的與其他實體之間發(fā)生相互作用插勤,使得系統(tǒng)功能模塊相對獨立沽瘦。
常用設計模式一覽:
名稱 | 定義 | 設計原則 | 例子 |
---|---|---|---|
策略模式 | 定義算法族,分別封裝起來农尖,讓他們之間可以互相替換析恋,此模式讓算法的變化獨立于使用算法的客戶。 | 1.封裝變化卤橄。 2.多用組合绿满,少用繼承。 3.針對接口編程窟扑,不針對實現(xiàn)編程喇颁。 |
策略模式1 <br /> <br /> 策略模式2 |
觀察者模式 | 在對象之間定義一對多的依賴漏健,這樣一來當一個對象改變狀態(tài),依賴它的對象都會收到通知橘霎,并自動更新蔫浆。 | 為了交互對象之間的松耦合設計而努力。 | 觀察者模式 |
裝飾者模式 | 動態(tài)的將責任附加到對象上姐叁。若要擴展功能瓦盛,裝飾者提供了比繼承更有彈性的替代方案。 | 對擴展開放外潜,對修改關閉原环。 | 裝飾者模式 |
工廠方法模式 | 定義了一個創(chuàng)建對象的接口,但由子類決定要實例化的類是哪一個处窥。工廠方法讓類把實例化推遲到子類嘱吗。 | 依賴抽象,不要依賴具體類滔驾。(依賴倒置) | 工廠方法模式1 <br /> <br /> 工廠方法模式2 |
抽象工廠模式 | 提供了一接口谒麦,用于創(chuàng)建相關或依賴對象的家族,而不需要明確指定具體類哆致。 | 同上 | 抽象工廠模式 |
單例模式 | 確保一個類只有一個實例绕德,并提供一個全局訪問點。 | - | 單例模式 |
命令模式 | 將請求封裝成對象摊阀,這可以讓你使用不同的請求耻蛇,隊列,或者日志請求來參數(shù)化其他對象胞此。命令模式也可以支持撤銷工作城丧。 | - | 命令模式 |
適配器模式 | 將一個類的接口,轉換成客戶期望的另一個接口豌鹤。適配器讓原本接口不兼容的類可以合作無間。 | - | 適配器模式 |
外觀模式 | 提供了一個統(tǒng)一的接口枝缔,用來訪問子系統(tǒng)中的一群接口布疙。外觀定義了一個高層接口,讓子系統(tǒng)更容易使用愿卸。 | 最少知識原則(德墨忒爾法則):只和你的密友談話灵临。 | 外觀模式 <br /> <br /> 注:適配器將一個對象包裝起來以改變其接口;裝飾者將一個對象包裝起來以增加新的行為和責任趴荸;而外觀將一群對象“包裝”起來以簡化其接口儒溉。 |
模板方法模式 | 在一個方法中定義一個算法的骨架,而將一些步驟延遲到子類中发钝。模板方法使得子類可以在不改變算法結構的情況下顿涣,重新定義算法中的某些步驟波闹。 | 好萊塢原則:別調用(打電話給)我們,我們會調用(打電話給)你涛碑。 | 模板方法模式 |
迭代器模式 | 提供一種方法順序訪問一個聚合對象中的各個元素精堕,而又不暴露其內部的表示。 | 一個類應該只有一個引起變化的原因蒲障。 | 迭代器模式 |
組合模式 | 允許你將對象組成樹形結構來表現(xiàn)“整體/部分”的層次結構歹篓。組合能讓客戶以一致的方式處理個別對象和對象組合。 | - | 組合模式 |
狀態(tài)模式 | 允許對象在內部狀態(tài)改變時改變它的行為揉阎,對象看起來好像修改了它的類庄撮。 | - | 狀態(tài)模式 |
代理模式 | 為另一個對象提供一個替身或占位符以控制對這個對象的訪問。 | - | 靜態(tài)代理 <br /> <br /> 動態(tài)代理 |