標籤:單例對象 super 使用 let method 延遲 str apt jdk
轉載請註明出處:http://blog.csdn.net/lhy_ycu/article/details/40031567
今天來對這23種設計模式做個總結。咱使用設計模式的目的是為了可重用代碼、讓代碼更easy被他人理解、保證代碼可靠性。當然設計模式並非萬能的。項目中的實際問題還有詳細分析。
咱不能為了使用設計模式而使用,而是在分析問題的過程中。想到使用某種設計模式能達到咱須要的效果,並且比不使用設計模式更有優勢。那麼咱該考慮使用設計模式了。
一、設計模式的一般分類
建立型(Creator)模式(共5種):單例、原型、建造者、Factory 方法、抽象工廠。
結構型(Structure)模式(共7種):適配器、代理、外觀、橋接、組合、享元、裝飾者。
行為型(Behavior)模式(共11種):策略、觀察者、模板方法、迭代器、責任鏈、命令、備忘錄、狀態、訪問者、中介者、解譯器。
二、以下談談我對這23種設計模式的理解
1、建立型(Creator)模式(共5種)
①單例(Singleton)是一種經常使用的設計模式。
在Java應用中。單例對象能保證在一個JVM中。該對象僅僅有一個執行個體存在。實現方式主要有餓漢式和懶漢式兩種。
②原型(Prototype):該模式的思想就是將一個對象作為原型,對其進行複製、複製。產生一個和原對象類似的新對象。實現方式主要有淺複製和深複製兩種。
淺複製的關鍵是super.clone();而深複製,須要採用二進位流的形式寫入當前對象,再對其進行讀取。
③建造者(Builder):該模式是將各種產品集中起來進行管理。將非常多功能整合到一個類裡,這個類能夠創造出比較複雜的東西。
它關注的是建立綜合物件,多個部分。
④Factory 方法(Factory method):調用工廠裡的方法來生產對象(產品)的。
它有3種實現方式:1)普通原廠模式:就是建立一個工廠類。對實現了同一介面的一些類進行執行個體的建立)。2)多個Factory 方法模式:是對普通Factory 方法模式的改進,在普通Factory 方法模式中,假設傳遞的字串出錯。則不能正確建立對象,而多個Factory 方法模式是提供多個Factory 方法。分別建立對象。3)靜態Factory 方法模式:將上面的多個Factory 方法模式裡的方法置為靜態,不須要建立執行個體,直接調用就可以。假設你想使用Factory 方法模式能夠優先選擇:靜態Factory 方法模式。
⑤抽象工廠(Abstract factory):顧名思義,就是把工廠抽象出來,不同的工廠生產不同的產品。
2、結構型(Structure)模式(共7種)
①適配器(Adapter):將某個類的介面轉換成client期望的還有一個介面表示,目的是消除因為介面不匹配所造成的類的相容性問題。主要分為三類:類的適配器模式、對象的適配器模式、介面的適配器模式。
1)類的適配器模式:當希望將一個類轉換成滿足還有一個新介面的類時,能夠使用類的適配器模式,建立一個新類,繼承原有的類,實現新的介面就可以。2)對象的適配器模式:當希望將一個對象轉換成滿足還有一個新介面的對象時,能夠建立一個Adapter類,持有原類的一個執行個體,在Adapter類的方法中,調用執行個體的方法就可以。
3)介面的適配器模式:當不希望實現一個介面中全部的方法時,能夠建立一個抽象類別Adapter實現全部方法,我們寫別的類的時候。繼承抽象類別就可以。
②代理(Proxy):代理模式事實上就是多一個代理類出來,替原對象進行一些操作。比方咱有的時候打官司須要請律師。由於律師在法律方面有專長,能夠替咱進行動作表達咱的想法,這就是代理的意思。有兩種實現方式:靜態代理(不使用JDK裡面的方法)、動態代理(InvocationHandler和Proxy)。
③外觀(Facade):也稱門面模式。
面板模式是為瞭解決類與類之間的依賴關係的。像spring一樣,能夠將類和類之間的關係配置到設定檔裡,而面板模式就是將他們的關係放在一個Facade類中。減少了類類之間的耦合度,該模式中沒有涉及到介面。
④橋接(Bridge): 把事物和其詳細實現分開(抽象化與實現化解耦),使他們能夠各自獨立的變化。橋接模式事實上就是一種將N*M轉化成N+M組合的思想。
⑤組合(Composite):組合模式有時又叫部分-總體模式。將對象組合成樹形結構來表示“部分-總體”階層。
⑥享元(Flyweight):運用共用的技術有效地支援大量細粒度的對象。主要目的是實現對象的共用。即共用池。當系統中對象多的時候能夠降低記憶體的開銷。在某種程度上。你能夠把單例看成是享元的一種特例。
⑦裝飾者(Decorator):動態地將責任附加到對象上,若要擴充功能。裝飾者提供了比繼承更具有彈性的替代方案。保持介面。增強效能。
行為型(Behavior)模式(共11種)
①策略(Strategy)讓使用者能夠選擇運行一個動作的方法,也就是說,使用者能夠選擇不同的策略來進行操作。個人認為策略模式能夠用這個公式:不同的XXX 擁有不同的XXX供使用者選擇。比方說:不同的象棋棋子擁有不同的走法供使用者選擇。
②觀察者(Observer):在對象之間定義了一對多的依賴關係。這樣一來,當一個對象改變狀態時,依賴它的對象都會收到通知並自己主動跟新。Java已經提供了對觀察者Observer模式的預設實現,Java對觀察者模式的支援主要體如今Observable類和Observer介面。
③模板方法(Template method):在一個方法中定義了一個演算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類能夠再不改變演算法結構的情況下,又一次定義演算法中的某些步驟。
簡而言之:模板方法定義了一個演算法的步驟,並同意子類為一個或多個步驟提供實現。
④迭代器(Iterator):提供了一種方法順序訪問一個彙總對象中的各個元素。而又不暴露其內部的表示。
⑤責任鏈(ChainOfResponsibility): 有多個對象,每一個對象持有下一個對象的引用。形成一條鏈,請求在這條鏈上傳遞,直到某一對象決定處理該請求,可是發出者並不清楚終於哪個對象會處理該請求。
⑥命令(Command):將“請求”(命令/口令)封裝成一個對象,以便使用不同的請求、隊列或者日誌來參數化其對象。命令模式也支援撤銷操作。
⑦備忘錄(Memento): 主要目的是儲存一個對象的某個狀態,以便在適當的時候恢複對象。
⑧狀態(State):同意對象在內部狀態改變時改變它的行為,對象看起來好像改動了它的類。狀態模式說白了就是一個對像有不同的狀態,不同的狀態相應不同的行為,它事實上是對switch case這種語句的拓展。
⑨解譯器(Interpreter):它定義了對象與對象之間進行某種操作之後會得到什麼值。
一般主要應用在OOP開發中的編譯器的開發中。所以適用面比較窄。
⑩中介者(Mediator):主要用來減少類與類之間的耦合的。由於假設類與類之間有依賴關係的話。不利於功能的拓展和維護,由於僅僅要改動一個對象,其他關聯的對象都得進行改動。
?訪問者(Visitor):把資料結構和作用於結構上的操作解耦合,使得操作集合可相對自由地演化。
訪問者模式適用於資料結構相對穩定而演算法又easy變化的系統。訪問者模式的長處是添加操作非常easy。由於添加操作意味著添加新的訪問者;而它的缺點就是添加新的資料結構非常困難。
三、Java設計模式菜鳥系列檔案夾
Java設計模式菜鳥系列(一)策略模式建模與實現
Java設計模式菜鳥系列(二)觀察者模式建模與實現
Java設計模式菜鳥系列(三)裝飾者模式建模與實現
Java設計模式菜鳥系列(四)Factory 方法模式建模與實現
Java設計模式菜鳥系列(五)抽象原廠模式建模與實現
Java設計模式菜鳥系列(六)單例模式建模與實現
Java設計模式菜鳥系列(七)命令模式建模與實現
Java設計模式菜鳥系列(八)適配器模式建模與實現
Java設計模式菜鳥系列(九)面板模式建模與實現
Java設計模式菜鳥系列(十)模板方法模式建模與實現
Java設計模式菜鳥系列(十一)迭代器模式建模與實現
Java設計模式菜鳥系列(十二)組合模式建模與實現
Java設計模式菜鳥系列(十三)狀態模式建模與實現
Java設計模式菜鳥系列(十四)代理模式建模與實現
Java設計模式菜鳥系列(十五)建造者模式建模與實現
Java設計模式菜鳥系列(十六)原型模式建模與實現
Java設計模式菜鳥系列(十七)橋接模式建模與實現
Java設計模式菜鳥系列(十八)責任鏈模式建模與實現
Java設計模式菜鳥系列(十九)備忘錄模式建模與實現
Java設計模式菜鳥系列(二十)解譯器模式建模與實現
Java設計模式菜鳥系列(二十一)享元模式建模與實現
Java設計模式菜鳥系列(二十二)中介者模式建模與實現
Java設計模式菜鳥系列(二十三)訪問者模式建模與實現
Java設計模式菜鳥系列教程PDF:http://download.csdn.net/detail/jave_lover/8714347
Java設計模式部落格全檔案夾