面向對象的23種設計模式

設計原則:高內聚低耦合,開閉原則。
兩大基礎設計原則
在說面向對象設計的六大原則之前,我們先來說下程序設計的原則:模塊內高內聚,模塊間低耦合。我們在面向對象時只需把類看成模塊,那麼就容易理解封裝等了。

說是七大原則,這裏我先提出來一個:對擴展開放,對修改關閉。 爲啥這麼說,因爲我們都知道軟件是要改的。對擴展開放保證了可以增加功能,像泛型啦這些。對修改關閉保證了像前的兼容性,jdk7兼容jdk6這樣。所以開閉原則圍繞軟件的整個生命週期。

從基礎原則出發,產生六個具體的原則:
1.單一職責(一個方法或一個類只做一件事,爲了模塊內高內聚) 
2.迪米特法則(也叫最少知道原則,爲了模塊間低耦合) 
3.里氏替換(就是繼承原則,子類可以無縫替代父類。很好的符合了開閉原則) 
4.依賴倒置(類之間的依賴通過接口實現,低耦合的同時對擴展開放) 
5.接口隔離(即把單個複雜接口拆分爲多個獨立接口,與上條共同實現面向接口編程) 
6.合成複用原則(即儘量使用合成/聚合的方式,而不是使用繼承。主要爲了防止繼承濫用而導致的類之間耦合嚴重。記住只有符合繼承原則時才用繼承)

設計模式
我覺得程序員最好的溝通方式是代碼,所以每個設計模式都是一個例子。所有例子都很方便,可以複製直接運行。因爲對java熟悉,所以下面設計模式例子都是用java語言來實現的。

創建型模式(IOC:控制反轉,就是創建分離的集大成)
1.Singleton:單例模式(全局只要一個實例) 
2.Prototype:原型模式(通過拷貝原對象創建新對象) 
3.Factory Method:工廠方法模式(對象創建可控,隱藏具體類名等實現解耦) 
4.Abstract Factory:抽象工廠模式(解決對象與其屬性匹配的工廠模式) 
5.Builder:建造者模式(封裝降低耦合,生成的對象與構造順序無關) 
創建型模式的五種有各自的使用環境,單例和原型比較簡單就不說了,工廠方法模式和建造者模式,都是封裝和降低耦合有啥不同呢,其實工廠方法關注的是一個類有多個子類的對象創建(汽車類的各種品牌),而建造者模式關注的是屬性較多的對象創建(能達到過程無關)。而抽象工廠模式關注的是對象和屬性及屬性與屬性的匹配關係(如奧迪汽車與其發動機及空調的匹配)。

結構型模式(對象的組成以及對象之間的依賴關係)
1.Adapter:適配器模式(適配不同接口和類,一般解決歷史遺留問題) 
2.Decorator:裝飾器模式(比繼承更靈活,可用排列組合形成多種擴展類) 
3.Proxy:代理模式(可以給類的每個方法增加邏輯,如身份驗證) 
4.Facade:外觀模式(對模塊或產品的封裝,降低耦合) 
5.Bridge:橋接模式(就是接口模式,抽象與實現分離) 
6.Plyweight:享元模式(相同對象的重用) 
7.Composite:組合模式(整體和部分相同時,如文件夾包含文件夾) 
我們可以看到適配器模式、裝飾器模式、代理模式都可以用包裝對象來實現(把對象作爲一個屬性放在用的對象裏),所以模式關注的並不是實現,而是解決的問題。模式更多體現的是類與類之間的邏輯關係,比如代理模式和裝飾器模式很像。但從字面就知道,代理是訪問不了實際工作對象的,這是他們的區別。

行爲型模式(即方法及其調用關係)
1.Strategy:策略模式(提供功能不同實現方式,且實現可選) 
2.Template Method:模板方法模式(相同流程用一個模板方法) 
3.Observer:觀察者模式(用訂閱-發佈實現的被觀察者變化時回調) 
4.Iterator:迭代器模式(一種內部實現無關的集合遍歷模式) 
5.Chain of Responsibility:責任鏈模式(事件處理的分層結構產生的責任鏈條) 
6.Command:命令模式(將命令者與被命令者分離) 
7.Memento:備忘錄模式(需要撤銷與恢復操作時使用) 
8.State:狀態模式 (當對象兩種狀態差別很大時使用) 
9.Visitor:訪問者模式 (當對同一對象有多種不同操作時使用) 
10.Mediator:中介者模式(以中介爲中心,將網狀關係變成星型關係) 
11.Interpreter:解釋器模式(常用於純文本的表達式執行)

寫完設計模式之後感覺設計模式更多的一種邏輯關係,如果代碼中有這種邏輯關係就可以用了。記得需要時候再用,不能爲了設計模式而設計模式。沒有什麼就是好的,最主要用起來舒服吧。
--------------------- 
作者:萬明智 
來源:CSDN 
原文:https://blog.csdn.net/wanyouzhi/article/details/77248710 
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章