設計模式初步

設計模式 | 菜鳥教程
參考書:Design Patterns - Elements of Reusable Object-Oriented Software(中文譯名:設計模式 - 可複用的面向對象軟件元素)
23種設計模式。這些模式可以分爲三大類:創建型模式(Creational Patterns)、結構型模式(Structural Patterns)、行爲型模式(Behavioral Patterns)。

序號 模式&描述 包括
1 創建型模式
這些設計模式提供了一種在創建對象的同時隱藏創建邏輯的方式,而不是使用新的運算符直接實例化對象。這使得程序在判斷針對某個給定實例需要創建哪些對象時更加靈活。
-工廠模式(Factory Pattern)
-抽象工廠模式(Abstract Factory Pattern)
-單例模式(Singleton Pattern)
-建造者模式(Builder Pattern)
-原型模式(Prototype Pattern)
2 結構型模式
這些設計模式關注類和對象的組合。繼承的概念被用來組合接口和定義組合對象獲得新功能的方式。
-適配器模式(Adapter Pattern)
-橋接模式(Bridge Pattern)
-過濾器模式(Filter、Criteria Pattern)
-組合模式(Composite Pattern)
-裝飾器模式(Decorator Pattern)
-外觀模式(Facade Pattern)
-享元模式(Flyweight Pattern)
-代理模式(Proxy Pattern)
3 行爲型模式
這些設計模式特別關注對象之間的通信。
-責任鏈模式(Chain of Responsibility Pattern)
-命令模式(Command Pattern)
-解釋器模式(Interpreter Pattern)
-迭代器模式(Iterator Pattern)
-中介者模式(Mediator Pattern)
-備忘錄模式(Memento Pattern)
-觀察者模式(Observer Pattern)
-狀態模式(State Pattern)
-空對象模式(Null Object Pattern)
-策略模式(Strategy Pattern)
-模板模式(Template Pattern)
-訪問者模式(Visitor Pattern)
4 J2EE 模式
這些設計模式特別關注表示層。這些模式是由 Sun Java Center 鑑定的。
-MVC 模式(MVC Pattern)
-業務代表模式(Business Delegate Pattern)
-組合實體模式(Composite Entity Pattern)
-數據訪問對象模式(Data Access Object Pattern)
-前端控制器模式(Front Controller Pattern)
-攔截過濾器模式(Intercepting Filter Pattern)
-服務定位器模式(Service Locator Pattern)
-傳輸對象模式(Transfer Object Pattern)

設計模式之間的關係
設計模式之間的關係

設計模式的六大原則

1、開閉原則(Open Close Principle)

開閉原則的意思是:對擴展開放,對修改關閉。在程序需要進行拓展的時候,不能去修改原有的代碼,實現一個熱插拔的效果。簡言之,是爲了使程序的擴展性好,易於維護和升級。想要達到這樣的效果,我們需要使用接口和抽象類,後面的具體設計中我們會提到這點。

2、里氏代換原則(Liskov Substitution Principle)

里氏代換原則是面向對象設計的基本原則之一。 里氏代換原則中說,任何基類可以出現的地方,子類一定可以出現。LSP 是繼承複用的基石,只有當派生類可以替換掉基類,且軟件單位的功能不受到影響時,基類才能真正被複用,而派生類也能夠在基類的基礎上增加新的行爲。里氏代換原則是對開閉原則的補充。實現開閉原則的關鍵步驟就是抽象化,而基類與子類的繼承關係就是抽象化的具體實現,所以里氏代換原則是對實現抽象化的具體步驟的規範。

3、依賴倒轉原則(Dependence Inversion Principle)

這個原則是開閉原則的基礎,具體內容:針對接口編程,依賴於抽象而不依賴於具體。

4、接口隔離原則(Interface Segregation Principle)

這個原則的意思是:使用多個隔離的接口,比使用單個接口要好。它還有另外一個意思是:降低類之間的耦合度。由此可見,其實設計模式就是從大型軟件架構出發、便於升級和維護的軟件設計思想,它強調降低依賴,降低耦合。

5、迪米特法則,又稱最少知道原則(Demeter Principle)

最少知道原則是指:一個實體應當儘量少地與其他實體之間發生相互作用,使得系統功能模塊相對獨立。

6、合成複用原則(Composite Reuse Principle)

合成複用原則是指:儘量使用合成/聚合的方式,而不是使用繼承。

單例模式

提供創建對象的最佳方式。涉及到一個單一的類,該類負責創建自己的對象,同時確保只有單個對象被創建。該類提供一種訪問其唯一的對象的方式,可以直接訪問,不需要創建對象。
注意:1.單例類只能有一個實例。2.單例類必須自己創建自己的唯一實例。3.單例類必須給所有其他對象提供這一實例。

*eg
在模擬學校運營模式的程序中,校長一實例爲唯一實例,全局使用的類而且會參與全校事務處理,即頻繁使用與銷燬該類對象。由於此對象太特殊又爲唯一值且頻繁參與程序運行過程。所以爲該校長類創建實例。*

工廠模式

簡單工廠模式

定義一個創建對象的接口,讓其子類自己決定實例化哪一個工廠類,工廠模式使其創建過程延遲到子類進行。創建對象過程在非工廠類中執行,耦合分離的思想。

*eg
汽車製造廠,再製造汽車前所有汽車都有一個統一標準,然後根據型號對不同汽車進行設計組裝,最後汽車分爲很多種,製造過程由工廠承辦,不同型號的車由不同廠商指定,工廠只是接到參數進行組裝。*

靜態工廠模式

一個類代表另一個類的功能,屬於結構型模式。創建具有現有對象的對象,以便向外界提供功能接口。
爲其他對象提供一種代理以控制這個對象的訪問。代理對象可以在客戶和目標對象之間起到中介作用。
每個代理只能爲一個接口服務,代理對象的一個接口只服務於一種類型的對象,如果要代理的方法很多,勢必要爲每一種方法都進行代理,靜態代理在程序規模稍大時就無法勝任了。另外如果接口增加一個方法,除了所有實現類需要實現這個方法外,所有代理類也需要實現此方法。增加了代碼維護的複雜度。

*eg
火車站銷售問題,賣票是一種功能方法(抽象主題角色),該方法由火車站(真實主題角色)實現,但對於這一流程的實現,不能買一張票新建創建一個火車站(現實中是不可能實現的),創建代售點(代理主題角色)也可以實現售票功能。*

抽象工廠模式

抽象工廠模式(Abstract Factory Pattern)是圍繞一個超級工廠創建其他工廠。該超級工廠又稱爲其他工廠的工廠。這種類型的設計模式屬於創建型模式,它提供了一種創建對象的最佳方式。
在抽象工廠模式中,接口是負責創建一個相關對象的工廠,不需要顯式指定它們的類。每個生成的工廠都能按照工廠模式提供對象。

*eg
換皮膚,更改產品的一套屬性。*

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