設計模式自我理解_java篇

1,工廠模式(Factory Method

工廠方法模式(Factory Method)  將程序中創建對象的操作,單獨出來處理,創建一個產品的工廠接口,把實際的工作轉移到具體的子類。大大提高了系統擴展的柔性,接口的抽象化處理給相互依賴的對象創建提供了最好的抽象模式。

2.抽象工廠模式(Abstract Factory) 針對多個產品等級的情況,而工廠方法模式針對單一產品等級的情況。

3.單例模式(Singleton) 改善全局變量和命名空間的衝突,可以說是一種改良了的全局變量。這種一個類只有一個實例,且提供一個訪問全局點的方式,更加靈活的保證了實例的創建和訪問約束。系統中只有一個實例,因此構造方法應該爲私有 餓漢式:類加載時直接創建靜態實例 懶漢式:第一次需要時才創建一個實例,那麼newInstance方法要加同步 餓漢式比懶漢式要好,儘管資源利用率要差。但是不用同步。

4.建造模式(Builder) 將一個對象的內部表象和建造過程分割,一個建造過程可以造出不同表象的對象。可簡化爲模版方法模式.

5.原型模式(ProtoType) 通過一個原型對象來創建一個新對象(克隆)。Java中要給出Clonable接口的實現,具體類要實現這個接口,並給出clone()方法的實現細節,這就是簡單原型模式的應用。  淺拷貝:只拷貝簡單屬性的值和對象屬性的地址  深拷貝:拷貝本對象引用的對象,有可能會出現循環引用的情況。可以用串行化解決深拷貝。寫到流裏再讀出來,這時會是一個對象的深拷貝結果。

6.適配器模式(Adapter) 在原類型不做任何改變的情況下,用一個適配器類把一個接口轉成另一個接口,擴展了新的接口,靈活且多樣的適配一切舊俗。這種打破舊框框,適配新格局的思想,是面向對象的精髓。以繼承方式實現的類的 Adapter模式和以聚合方式實現的對象的Adapter模式,各有千秋,各取所長。

7.組合模式(Composite) 把整體和局部的關係用樹狀結構描述出來,使得客戶端把整體對象和局部對象同等看待

8.裝飾模式(Decorator) 以對客戶透明的方式來擴展對象的功能。 用戶根據功能需求隨意選取組成對象的成分,通過方法的鏈式調用來實現。 可以給對象動態的增加功能,比繼承靈活性更大。

9.代理模式(Proxy) 用一個代理對象來作爲另一個對象的代理,對客戶來說是透明的。 存在一個抽象主題類,具體主題類和代理主題類都繼承(實現)抽象主題,代理主題類中的方法會調用具體主題類中相對應的方法。

10.享元模式(Flyweight Pattern) 對象的狀態分爲內蘊狀態和外蘊狀態。內蘊狀態不隨環境變化而變化,因此可以作成系統共享. 

11.門面模式(Facade) 訪問子系統的時候,通過一個Façade對象訪問。Facade類是單例的。 客戶代碼只需要和門面對象通信,不需要和具體子系統內部的對象通信,使得他們之間的耦合關係減弱。 這次將表現層和邏輯層隔離,封裝底層的複雜處理,爲用戶提供簡單的接口,這樣的例子隨處可見。

門面模式很多時候更是一種系統架構的設計,在我所做的項目中,就實現了門面模式的接口,爲複雜系統的解耦提供了最好的解決方案。 

12.橋樑模式(Bridge) 將抽象和實現脫耦,使得二者可以單獨變化。使得一個繼承關係不承擔兩個變化因素.使用合成來代替繼承的一種體現.

13.策略模式(Strategy) 如同LayoutManager和具體的佈局管理器的關係,在抽象策略類中定義方法,將易於變化的部分封裝爲接口,通常Strategy 封裝一些運算法則,使之能互換。Bruce Zhang在他的博客中提到策略模式其實是一種“面向接口”的編程方法,真是恰如其分。 在具體策略子類中實現,客戶代碼根據不同的需要選擇相應的具體類,例如電子商務中多種價格算法。 一種策略一旦選中,整個系統運行期是不變化的。

14.模板方法(Template Method) 準備一個抽象類,把部分確定的邏輯定義在某些方法中,用其他抽象方法實現剩餘的邏輯。不同子類對這些邏輯有不同的實現。 用法:定義多個抽象操作,定義並實現一個模板方法,將步驟放在這個具體方法裏,推遲到子類實現。子類可以改變父類的可變部分,但不能改變模板方法所代表的頂級邏輯。

15.觀察者模式(Observer) 定義對象間的一種一對多的依賴關係,當一個對象的狀態發生改變時, 所有依賴於它的對象都得到通知並被自動更新。觀察者和被觀察者的分開,爲模塊劃分提供了清晰的界限。在低耦合的對象間完成協調。 Java中的事件模型就是一個應用。

16.迭代器模式(Iterator) 類似於集合中的Iterator,使用迭代器來統一不同集合對象的遍歷方式。在絕大多數的系統中,都會用到數組、集合、鏈表、隊列這樣的類型,關心迭代模式的來龍去脈非常有必要。在遍歷算法中,迭代模式提供了遍歷的順序訪問容 器,GOF給出的定義爲:提供一種方法訪問一個容器(container)對象中各個元素,而又不需暴露該對象的內部細節。.NET中就是使用了迭代器來 創建用於foreach的集合。

17.責任鏈(Chain of Responsibility) 多個處理器對象連成一串,請求在這條鏈上傳遞,由該處理這個請求的處理器來處理。發出請求的客戶端並不知道哪個對象處理請求。

18.狀態模式(State) 在對象內部狀態改變時改變其行爲。把所研究的對象的行爲封裝在不同的狀態對象中。

19.備忘錄模式(Memento) 備忘錄對象用來存儲另一個對象的快照對象,保存其內部狀態,使得可以隨時恢復。 備忘錄角色:保存發起人對象的內部狀態,保護內容不被除發起人對象之外的對象獲取。窄接口:負責人對象和其他對象看到的接口,只允許把備忘錄對象傳給其他對象。寬接口:發起人能看到的接口,允許讀取內部狀態。 發起人角色:創建並使用備忘錄對象來保存其狀態 負責人角色:負責保存備忘錄對象。  白箱實現:備忘錄類對其他類也可見,這樣發起人的狀態可能會存在安全問題。  黑箱實現:把備忘錄類作成發起人的內部類,對外提供一個標識接口。

參考文章:http://blog.csdn.net/chmask/article/details/2631485

詳細分析文章:http://zz563143188.iteye.com/blog/1847029











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