23種設計模式概述

一.設計模式的分類

設計模式總體來說分為三大類:

  1. 創(chuàng)建型模式
    共五種:工廠方法模式厨相、抽象工廠模式领曼、單例模式鸥鹉、建造者模式、原型模式庶骄。
  2. 結構性模式
    共七種:適配器模式毁渗、裝飾器模式、代理模式单刁、外觀模式祝蝠、橋接模式、組合模式幻碱、享元模式。
  3. 行為型模式
    共十一種:策略模式细溅、模板方法模式褥傍、觀察者模式、迭代子模式喇聊、責任鏈模式恍风、命令模式、備忘錄模式誓篱、狀態(tài)模式朋贬、訪問者模式、中介者模式窜骄、解釋器模式锦募。

具體如下:

創(chuàng)建型:
一、Singleton邻遏,單例模式:保證一個類只有一個實例糠亩,并提供一個訪問它的全局訪問點
二、Abstract Factory准验,抽象工廠:提供一個創(chuàng)建一系列相關或相互依賴對象的接口赎线, 而無須指定它們的具體類。
三糊饱、Factory Method垂寥,工廠方法:定義一個用于創(chuàng)建對象的接口,讓子類決定實例化哪 一個類另锋,F(xiàn)actory Method 使一個類的實例化延遲到了子類滞项。
四、Builder夭坪,建造模式:將一個復雜對象的構建與他的表示相分離蓖扑,使得同樣的構建 過程可以創(chuàng)建不同的表示。
五台舱、Prototype律杠,原型模式:用原型實例指定創(chuàng)建對象的種類潭流,并且通過拷貝這些原型 來創(chuàng)建新的對象。

行為型:
六柜去、Iterator灰嫉,迭代器模式:提供一個方法順序訪問一個聚合對象的各個元素,而又不 需要暴露該對象的內部表示嗓奢。
七讼撒、Observer,觀察者模式:定義對象間一對多的依賴關系股耽,當一個對象的狀態(tài)發(fā)生 改變時根盒,所有依賴于它的對象都得到通知自動更新。
八物蝙、Template Method炎滞,模板方法:定義一個操作中的算法的骨架,而將一些步驟延遲 到子類中诬乞,TemplateMethod 使得子類可以不改變一個算法的結構即可以重定義該算法得某 些特定步驟册赛。
九、Command震嫉,命令模式:將一個請求封裝為一個對象森瘪,從而使你可以用不同的請求 對客戶進行參數(shù)化,對請求排隊和記錄請求日志票堵,以及支持可撤銷的操作扼睬。
十、State悴势,狀態(tài)模式:允許對象在其內部狀態(tài)改變時改變他的行為痰驱。對象看起來似乎 改變了他的類。
十一瞳浦、Strategy担映,策略模式:定義一系列的算法,把他們一個個封裝起來叫潦,并使他們可 以互相替換蝇完,本模式使得算法可以獨立于使用它們的客戶。
十二矗蕊、China of Responsibility短蜕,職責鏈模式:使多個對象都有機會處理請求,從而避免 請求的送發(fā)者和接收者之間的耦合關系
十三傻咖、Mediator朋魔,中介者模式:用一個中介對象封裝一些列的對象交互。
十四卿操、Visitor警检,訪問者模式:表示一個作用于某對象結構中的各元素的操作孙援,它使你 可以在不改變各元素類的前提下定義作用于這個元素的新操作。
十五扇雕、Interpreter拓售,解釋器模式:給定一個語言,定義他的文法的一個表示镶奉,并定義一 個解釋器础淤,這個解釋器使用該表示來解釋語言中的句子。
十六哨苛、Memento鸽凶,備忘錄模式:在不破壞對象的前提下,捕獲一個對象的內部狀態(tài)建峭, 并在該對象之外保存這個狀態(tài)玻侥。

結構型有:
十七、Composite迹缀,組合模式:將對象組合成樹形結構以表示部分整體的關系,Composite 使得用戶對單個對象和組合對象的使用具有一致性蜜徽。
十八祝懂、Facade,外觀模式:為子系統(tǒng)中的一組接口提供一致的界面拘鞋, Facade提供了一 高層接口砚蓬,這個接口使得子系統(tǒng)更容易使用。
十九盆色、Proxy灰蛙,代理模式:為其他對象提供一種代理以控制對這個對象的訪問
二十、Adapter,適配器模式:將一類的接口轉換成客戶希望的另外一個接口隔躲,Adapter 模式使得原本由于接口不兼容而不能一起工作那些類可以一起工作摩梧。
二十一、Decrator宣旱,裝飾模式:動態(tài)地給一個對象增加一些額外的職責仅父,就增加的功 能來說,Decorator 模式相比生成子類更加靈活浑吟。
二十二笙纤、Bridge,橋模式:將抽象部分與它的實現(xiàn)部分相分離组力,使他們可以獨立的變 化省容。
二十三、Flyweight燎字,享元模式

  • 其實還有兩類:并發(fā)型模式和線程池模式腥椒。

以上設計模式了解清楚后可以在這里看一下它們之間的關系:


二.設計模式的六大原則:

  • 總原則:開閉原則(Open Close Principle)
    開閉原則就是說對擴展開放阿宅,對修改關閉。在程序需要進行拓展的時候寞酿,不能去修改原有的代碼家夺,而是
    要擴展原有代碼,實現(xiàn)一個熱插拔的效果伐弹。所以一句話概括就是:為了使程序的擴展性好拉馋,易于維護和
    升級。想要達到這樣的效果惨好,我們需要使用接口和抽象類等煌茴,后面的具體設計中我們會提到這點。

    1. 單一職責原則
      不要存在多于一個導致類變更的原因日川,也就是說每個類應該實現(xiàn)單一的職責蔓腐,如若不然,就應該把類拆分龄句。
    1. 里氏替換原則
      里氏代換原則(Liskov Substitution Principle LSP)面向對象設計的基本原則之一回论。 里氏代換原則中說, 任何基類可以出現(xiàn)的地方分歇,子類一定可以出現(xiàn)傀蓉。 LSP 是繼承復用的基石,只有當衍生類可以替換掉基類职抡,軟件單位的功能不受到影響時葬燎,基類才能真正被復用,而衍生類也能夠在基類的基礎上增加新的行為缚甩。里氏代換原則是對“開-閉”原則的補充谱净。實現(xiàn)“開-閉”原則的關鍵步驟就是抽象化。而基類與子類的繼承關系就是抽象化的具體實現(xiàn)擅威,所以里氏代換原則是對實現(xiàn)抽象化的具體步驟的規(guī)范壕探。—— From Baidu
      里氏替換原則中郊丛,子類對父類的方法盡量不要重寫和重載浩蓉。因為父類代表了定義好的結構,通過這個規(guī)范的接口與外界交互宾袜,子類不應該隨便破壞它捻艳。
    1. 依賴反轉/依賴于抽象 原則(Dependence Inversion Principle)
      這個是開閉原則的基礎,具體內容:面向接口編程庆猫,依賴于抽象而不依賴于具體认轨。寫代碼時用到具體類時,不與具體類交互月培,而與具體類的上層接口交互嘁字。
    1. 接口隔離原則(Interface Segregation Principle)
      每個接口中不存在子類用不到卻必須實現(xiàn)的方法恩急,如果不然,就要將接口拆分纪蜒。使用多個隔離的接口衷恭,比使用單個接口(多個接口方法集合到一個的接口)要好。
    1. 迪米特法則(最少知道原則)(Demeter Principle)
      一個類對自己依賴的類知道的越少越好纯续。 也就是說無論被依賴的類多么復雜随珠,都應該將邏輯封裝在方法的內部,通過 public 方法提供給外部猬错。這樣當被依賴的類變化時窗看,才能最小的影響該類。 最少知道原則的另一個表達方式是:只與直接的朋友通信倦炒。類之間只要有耦合關系显沈,就叫朋友關系。耦合分為依賴逢唤、關聯(lián)拉讯、聚合、組合等鳖藕。我們稱出現(xiàn)為成員變量魔慷、方法參數(shù)、方法返回值中的類為直接朋友吊奢。局部變量盖彭、臨時變量則不是直接的朋友纹烹。我們要求陌生的類不要作為局部變量出現(xiàn)在類中页滚。
    1. 合成復用原則(Composite Reuse Principle)
      原則是盡量首先使用合成/聚合的方式,而不是使用繼承铺呵。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末裹驰,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子片挂,更是在濱河造成了極大的恐慌幻林,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件音念,死亡現(xiàn)場離奇詭異沪饺,居然都是意外死亡,警方通過查閱死者的電腦和手機闷愤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門整葡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人讥脐,你說我怎么就攤上這事遭居√淦鳎” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵俱萍,是天一觀的道長端壳。 經常有香客問我,道長枪蘑,這世上最難降的妖魔是什么损谦? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮腥寇,結果婚禮上成翩,老公的妹妹穿的比我還像新娘。我一直安慰自己赦役,他們只是感情好麻敌,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著掂摔,像睡著了一般术羔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上乙漓,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天级历,我揣著相機與錄音,去河邊找鬼叭披。 笑死寥殖,一個胖子當著我的面吹牛,可吹牛的內容都是我干的涩蜘。 我是一名探鬼主播嚼贡,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼侥祭,長吁一口氣:“原來是場噩夢啊……” “哼酝蜒!你這毒婦竟也來了?” 一聲冷哼從身側響起琐旁,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤误窖,失蹤者是張志新(化名)和其女友劉穎叮盘,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體霹俺,經...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡柔吼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了丙唧。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片愈魏。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出蝌戒,到底是詐尸還是另有隱情串塑,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布北苟,位于F島的核電站桩匪,受9級特大地震影響,放射性物質發(fā)生泄漏友鼻。R本人自食惡果不足惜傻昙,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望彩扔。 院中可真熱鬧妆档,春花似錦、人聲如沸虫碉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽敦捧。三九已至须板,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間兢卵,已是汗流浹背习瑰。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留秽荤,地道東北人甜奄。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像窃款,于是被迫代替她去往敵國和親课兄。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內容