設計模式簡介

一,策略模式java

1, 定義算法

  定義算法族,分別封裝起來,讓它們之間能夠相互替換,此模式讓算法的變化獨立於使用算法的客戶。編程

2, 要點設計模式

  A. 知道OO基礎,並不足以讓你設計出良好的OO系統。緩存

  B. 良好的OO設計必須具有能夠複用、可擴充、可維護三個特性。安全

  C. 模式可讓咱們建造出具備良好OO設計質量的系統。多線程

  D.模式被認爲是歷經驗證的OO設計經驗。app

  E. 模式不是代碼,而是針對設計問題的通用解決方案。你可把它們應用到特定的應用中。性能

  F. 模式不是被髮明,而是被發現。編碼

  G. 大多數的模式和原則,都着眼於軟件變化的主題。

  H.大多數的模式都容許系統局部改變獨立於其餘部分。

  I.   咱們常把系統中會變化的部分抽出來封裝。

  J.  模式讓開發人員之間有共享的語言,可以最大化溝通的價值。

二,觀察者模式

1, 定義

  在對象中定義一對多的依賴,這樣一來,當一個對象改變狀態,依賴它的對象都會收到通知,並自動更新。

2, 要點

  A. 觀察者模式定義了對象之間一對多的關係。

  B. 主題(也就是可觀察者)用一個共同的接口來更新觀察者

  C. 觀察者和可觀察者之間用鬆耦合方式結合(loosecoupling),可觀察者不知道觀察者的細節,只知道觀察者實現了觀察者接口。

  D.使用此模式時,你能夠從被觀察者出推(push)或拉(pull)數據(然而,推的方式被認爲更「正確」)。

  E. 有多個觀察者時,不能夠依賴特定的通知次序。

  F. Java有多種觀察者模式的實現,包括了通用的java.util.Observable。

  G. 要注意java.util.Observable實現上所帶來的問題。

  H.若是有必需要的話,能夠實現本身的Observable。

  I.   Swing大量使用觀察者模式,許多GIUI也是如此。

  J.  此模式也被應用在許多地方,例如:JavaBeans、RMI。

三,裝飾者模式

1, 定義

  動態的將責任附加到對象上。想要擴展功能,裝飾着提供有別於繼承的另外一種選擇。

2, 要點

  A.繼承屬於擴展的形式之一,但不見得時達到彈性設計的最佳方式。

  B.在咱們的設計中,應該容許行爲能夠擴展,而無須修改現有的代碼。

  C.組合和委託可用於在運行時動態地加上新的行爲。

  D.除了繼承,裝飾者模式也可讓咱們擴展行爲。

  E.裝飾者模式意味着一羣裝飾者類,這些類用來包裝具體組件。

  F.裝飾者類反映出被裝飾者的組件類型(事實上,它們具備相同的類型,都通過接口或繼承實現)。

  G.裝飾者能夠在被裝飾者的行爲前面與/或後面加上本身的行爲,甚至將被裝飾者的行爲整個取代掉,而達到特定的目的。

  H.你能夠用無數個裝飾者包裝一個組件。

  I.裝飾者通常對組件的客戶是透明的,除非客戶程序依賴於組件的具體類型。

  J.裝飾者會致使設計中出現許多的小對象,若是過分使用會讓程序變得很複雜。

四,工廠方法模式

1, 定義

  定義了一個建立對象的接口,但由子類決定要實例化的類是哪個。工廠方法讓類把實例化推遲到子類。

2, 要點

  A.全部的工廠都是用來封裝對象的建立。

  B.簡單工廠,雖然不是真正的設計模式,但仍不失爲一個簡單的方法,能夠將客戶程序從具體類解耦。

  C.工廠方法使用繼承,把對象的建立委託給子類,子類實現工廠方法來建立對象。

  D.抽象工廠方法使用對象組合,對象的建立被實如今工廠接口所暴露出來的方法中。

  E.全部工廠模式都是經過減小應用程序和具體類之間的依賴促進鬆耦合。

  F.工廠方法容許類將實例化延遲到子類進行。

  G.抽象工廠建立相關的對象家族,而不須要依賴它們的具體類。

  H.依賴倒置原則,指導咱們避免依賴具體類型,而要儘可能依賴抽象。

  I.工廠是頗有威力的技巧,幫助咱們針對抽象編程,而不要針對具體類編程。

五,單件模式

1, 定義 

  確保一個類只有一個實例,並提供一個全局訪問點。

2, 要點

  A.單件模式確保程序中一個類最多隻有一個實例。

  B.單件模式也提供訪問這個實例的全局點。

  C.在Java中實現單件模式須要私有化構造器,一個靜態方法和一個靜態變量。

  D.肯定在性能和資源上的限制,而後當心地選擇適當的方案來實現單件,一解決多線程的問題。

六,命令模式

1, 定義

  將「請求」封裝成對象,以便使用不一樣的請求、隊列或者日誌來參數化其餘對象。命令模式也支持可撤銷的操做。

2, 要點

  A.命令模式將發出請求的對象和執行請求的對象解耦。

  B.在被解耦的二者之間是經過命令對象進行溝通的。命令對象封裝了接收者和一個或一組動做。

  C.調用者經過調用命令對象的execute()發出請求,這會使得接收者的動做被調用。

  D.調用者能夠接受命令看成參數,甚至在運行時動態的進行。

  E.命令能夠支持撤銷,作法時實現一個undo()方法來回到execute()被執行前的狀態。

  F. 宏命令是命令的一種簡單的延伸,容許調用多個命令。宏命令也支持撤銷。

  G.實際操做時,很常見使用「聰明」命令對象,也就是直接實現了請求,而不是將工做委託給接收者。

  H.命令也能夠用來實現日誌和事務系統。

七,適配器模式和外觀模式

1, 定義

  A.適配器模式:將一個類的接口,轉換成客戶指望的其一個接口。適配器讓本來不兼容的類能夠合做無間。

  B.外觀模式:提供了一個統一的接口,用來訪問子系統中的一羣接口。外觀定義了一個高層接口,讓子系統更容易使用。

2, 要點

  A.當須要使用一個現有的類而其接口並不符合你的須要時,就使用適配器。

  B.當須要簡化並統一一個很大的接口或者一羣複雜的接口時,使用外觀。

  C.外觀將客戶從一個複雜的子系統中解耦。

  D.實現一個適配器可能須要一番功夫,也可能不費功夫,視目標接口的大小和複雜度而定。

  E.實現一個外觀,須要將子系統組合進外觀中,而後將工做委託給子系統執行。

  F.適配器模式有兩種形式,對象適配器和類適配器。類適配器須要用到多繼承(Java沒法實現)

  G.你能夠爲一個子系統實現一個以上的外觀

  H.適配器將一個對象包裝起來以改變其接口;裝飾者模式將對象包裝起來以增長新的行爲和責任;而外觀將一羣對象「包裝」起來以簡化其接口。

八,模板方法模式

1, 定義

  在一個方法中定義一個算法的骨架,而將一些步驟延遲到子類中,模板方法是的子類能夠在不改變算法結構的狀況下,從新定義算法中的某些步驟。

2, 要點

  A「模板方法」定義了算法的步驟,把這些步驟的實現延遲到子類。

  B.模板方法模式爲咱們提供了一種代碼複用的重要技巧。

  C.模板方法的抽象類能夠定義具體的方法、抽象方法和鉤子

  D.抽象方法由子類實現

  E.鉤子是一種方法,它在抽象類中不作事,或者只作默認的事,子類能夠選擇要不要覆蓋它。

  F.爲了防止子類改變模板方法中的算法,能夠將模板方法聲明爲final。

  G.好萊塢原則告訴咱們,將決策權放在高層組件中,以便決定如何以及什麼時候調用底層模塊。

  H.你將在真實世界代碼中看到模板方法模式的許多變體,不要期待它們全都是一眼就能夠被你認出的。

  I.策略模式和模板方法模式都封裝算法,一個用組合,一個用繼承。

  J.工廠方法是模板方法的一種特殊版本。

九,迭代器和組合模式

1, 定義

  A. 迭代器模式:提供一種方法順序訪問一個聚合對象中的各個元素,而又不暴露其內部的表示。

  B. 組合模式:容許你將對象組成樹形結構來表示「總體/部分」的層次結構。組合能讓客戶以一致的方式處理個別對象和對象組合。

2, 要點

  A.迭代器容許訪問聚合的元素,而不須要暴露它的內部結構。

  B.迭代器將遍歷聚合的工做封裝進一個對象中。

  C.當使用迭代器的時候,咱們依賴聚合提供遍歷。

  D.迭代器提供了一個通用的接口,讓咱們遍歷聚合的項,當咱們編碼使用聚合的項時,就可使用多態機制。

  E.咱們應該努力讓一個類只分配一個責任。

  F.組合模式提供一個結構,可同時包容個別對象和組合對象。

  G.組合模式容許客戶對個別對象以及組合對象一視同仁。

  H.組合結構內的任意對象稱爲組件,組件能夠是組合也能夠是葉節點。

  I.在實現組合模式時,有許多設計上的折衷,你要根據須要平衡透明性和安全性。

十,狀態模式

1, 定義

  容許對象在內部狀態改變時改變它的行爲,對象看起來好像修改了它的類。

2, 要點

  A.狀態模式容許一個對象基於內部狀態而擁有不一樣的行爲。

  B.和程序狀態機(PSM)不一樣,狀態模式用類表明狀態。

  C.Context會將行爲委託給當前狀態對象。

  D.經過將每一個狀態封裝進一個類,咱們把之後須要作的任何改變局部化了。

  E.狀態模式和策略模式有相同的類圖,可是它們的意圖不一樣。

  F.策略模式一般會用行爲或算法來配置Context類。

  G.狀態模式容許Context隨着狀態的改變而改變行爲。

  H.狀態轉換能夠由State類或Context類控制。

  I.使用狀態模式一般會致使設計中的類的數目大量增長。

  J.狀態類能夠被多個Context實例共享。

十一,代理模式

1, 定義

  爲另外一個對象提供一個替身或佔位符以訪問這個對象。

2, 要點

  A.代理模式爲另外一個對象提供表明,以便控制客戶對對象的訪問,管理訪問的方式由許多種。

  B.遠程代理管理客戶和遠程對象之間的交互。

  C.虛擬代理控制訪問實例化開銷大的對象。

  D.保護代理基於調用者控制對對象方法的訪問。

  E.代理模式有許多變體,例如:緩存代理、同步代理、防火牆代理和寫入時複製代理。

  F.代理在結構上相似裝飾者,可是目的不一樣。

  G.裝飾者模式爲對象加上行爲,而代理則是控制訪問。

  H.Java內置的代理支持,能夠根據須要創建動態代理,並將全部調用分配到所選的處理器。  

  I.就和其餘的包裝者(wrapper)同樣,代理會形成你的設計中類的數目增長。

十二,複合模式

1, 定義

  複合模式結合兩個或以上的模式,組成一個解決方案,解決一再發生的通常性問題。設計模式是在某情景下,針對某問題的某種解決方案

相關文章
相關標籤/搜索