在上學期的學習當中,咱們學習了23種設計模式,但因爲本身平時用的很少,因此並非很是熟練。如今根據本身的理解與書本的知識,算法
對23種設計模式作一個簡單的描述。設計模式
1、建立型模式:學習
建立型模式關注對象的建立過程,將對象的建立和對象的使用分離,在使用對象時無須知道對象的建立細節。建立型模式包括工廠方法模式、設計
抽象工廠模式、建造者模式、原型模式、單例模式。代理
1.工廠方法模式
工廠父類負責定義建立產品對象的公共接口,而工廠子類則負責生成具體的產品對象,這樣作的目的是將產品類的實例化操做延遲到工廠日誌
子類中完成,即經過工廠子類來肯定究竟應該實例化哪個具體產品類。
2.抽象工廠模式
提供一個建立一系列相關或依賴對象的接口,而無須指定他們具體的類。
3.建造者模式
將一個複雜對象的構建與它的表示分離,使得一樣的構建過程能夠建立不一樣的表示。建造者模式是一步一步建立一個複雜的對象,它容許對象
用戶只經過指定複雜對象的類型和內容就能夠構建它們,用戶不須要知道內部的具體構建細節。
4.原型模式
用原型實例指定建立對象的種類,而且經過複製這些原型建立新的對象。原型模式容許一個對象再建立另一個可定製的對象,無須知道接口
任何建立的細節。原型模式的基本工做原理是經過將一個原型對象傳給那個要發動建立的對象,這個要發動建立的對象經過請求原型對象複製原型來實現建立過程。
5.單例模式
一個類只有一個實例,必須自行建立這個實例,鼻祖自行向整個系統提供實例,身份證號碼具備惟一性,這就是單例模式的一個場景。單例模原型
式的要點有三個:一是某個類只能有一個實例;二是它必須自行建立這個實例;三是它必須自行向整個系統提供這個實例。產品
2、結構型模式:
結構型模式就像搭積木,簡單的積木組合成功能強大的結構,類或者對象結合在一塊兒造成更大的結構。結構型模式包括適配
器模式、橋接模式、組合模式、裝飾模式、外觀模式、享元模式、代理模式。
1.適配器模式
將一個接口轉換成客戶但願的另外一個接口,適配器模式使接口不兼容的那些類能夠一塊兒工做。
2.橋接模式
將抽象部分與它的實現部分分離,使它們均可以獨立地變化。
3.組合模式
組合多個對象造成樹形結構以表示「總體-部分」的結構層次。組合模式對單個對象(葉子對象)和組合對象(容器對象)的使用具備一致性。
4.裝飾模式
動態地給一個對象增長一些額外的職責,就增長對象功能來講,裝飾模式比生成子類實現更爲靈活。
5.外觀模式
外部與一個子系統通訊必須經過一個統一的外觀對象進行,爲子系統中的一組接口提供一個一致的界面,外觀模式定義了一個高層接口,
這個接口使得這一子接口更加容易使用。
6.享元模式
運用共享技術有效地支持大量細粒度對象的複用。系統只使用少許的對象,而這些對象都很類似,狀態變化很小,能夠實現對象的屢次複用。
7.代理模式
給某一個對象提供一個代理,並由代理對象控制對原對象的引用。
3、行爲型模式:
行爲型模式關注系統中對象之間的相互交互,經過行爲型模式,能夠更加清楚劃分類與對象的職責,行爲型模式包括職責鏈
模式、命令模式、解釋器模式、迭代器模式、中介者模式、備忘錄模式、觀察者模式、狀態模式、策略模式、模板方法模式、訪問者模式。
1.職責鏈模式
避免請求發送者與接收者耦合在一塊兒,讓多個對象都有可能接收請求,將這些對象鏈接成一條鏈,而且沿着這條鏈傳遞請求,直到有對象處理它爲止
2.命令模式
將一個請求封裝爲一個對象,從而使咱們可用不一樣的請求對客戶進行參數化;對請求排隊或者記錄請求日誌,以及支持可撤銷的操做。
3.解釋器模式
定義語法的文法,而且創建一個解釋器來解釋語言中的句子,這裏的「語言」意思是使用規定格式和語法的代碼。
4.迭代器模式
提供一種方法來訪問聚合對象,而不是暴露這個對象的內部表示。
5.中介者模式
用一箇中介對象來封裝一系列的對象交互,中介者使各對象不須要顯示地相互引用,從而使其耦合鬆散,並且能夠獨立地改變它們之間的交互。
6.備忘錄模式
在不破壞封裝的前提下,捕捉一個對象的內部狀態,並在該對象以外保存這個狀態,這樣能夠在之後將對象恢復到原先保存的狀態。
7.觀察者模式
定義對象間的一種一對多依賴關係,使得每當一個對象狀態發生改變時,其相關依賴對象皆獲得通知並自動更新。
8.狀態模式
容許一個對象在其內部狀態改變時改變它的行爲,對象看起來彷佛修改了它的類。
9.策略模式
定義一系列算法,將每個算法封裝起來,並讓他們能夠相互替換。
10.模板方法模式
定義一個操做中算法的骨架,而將一些步驟延遲到子類中,模板方法使得子類能夠不改變一個算法的結構便可重定義該算法的某些特定步驟。
11.訪問者模式
表示一個做用於某對象結構中的各元素的操做,它使咱們能夠在不改變各元素的類的前提下定義做用於這些元素的新操做。
設計模式是軟件工程當中很經常使用的知識技能,咱們必須熟練地掌握。在平時的學習當中,咱們應該多複習設計模式的相關知識,努力擴展本身的知識層面。