設計模式總結

轉載 Doing

設計模式的六大原則
開閉原則:模塊應盡量在不修改原代碼(閉)的情況下進行擴展(開)。即在程序需要進行拓展的時候,不能去修改原有的代碼,實現一個熱插拔的效果。
里氏代換原則:如果調用的是父類的話,那么換成子類也完全可以運行。 派生類能夠在基類的基礎上增加新的行為。只有當派生類可以替換掉基類,且軟件單位的功能不受到影響時,基類才能真正被復用。實現開閉原則的關鍵步驟就是抽象化,而基類與子類的繼承關系就是抽象化的具體實現,所以里氏代換原則是對實現抽象化的具體步驟的規范。
依賴倒置原則:1、高層次的模塊不應該依賴于低層次的模塊,他們都應該依賴于抽象。2、抽象不應該依賴于具體實現,具體實現應該依賴于抽象。要求對抽象/接口進行編程,不要對實現進行編程,這樣就降低了客戶與實現模塊間的耦合。
接口隔離原則:每一個接口應該是一種角色,不干不該干的事,該干的事都要干。降低類之間的耦合度。
合成復用原則:要盡量使用組合/ 聚合,盡量不要使用繼承。只有“Is - A” 關系才符合繼承關系,“Has- A” 關系應當使用聚合來描述。
最少知識原則:一個對象應對其它對象有盡可能少的了解。即一個實體應當盡量少地與其他實體之間發生相互作用,使得系統功能模塊相對獨立。

創建型模式
這些設計模式提供了一種在創建對象的同時隱藏創建邏輯的方式,而不是使用新的運算符直接實例化對象。這使得程序在判斷針對某個給定實例需要創建哪些對象時更加靈活。
工廠模式與抽象工廠模式 **(Factory Pattern)(Abstract Factory Pattern):不同條件下創建不同實例
單例模式 (Singleton Pattern)**保證一個類僅有一個實例
建造者模式 (Builder Pattern)**將一個復雜的構建過程與其具表示細節相分離,使得同樣的構建過程可以創建不同的表示
原型模式 (Prototype Pattern)**通過拷貝原型創建新的對象

結構型模式
這些設計模式關注類和對象的組合。
適配器模式 (Adapter Pattern)**使得原本由于接口不兼容而不能一起工作的那些類可以一起工作
裝飾器模式 (Decorator Pattern)**保持接口,增強性能:修飾類繼承被修飾對象的抽象父類,依賴被修飾對象的實例(被修飾對象依賴注入),以實現接口擴展
橋接模式 (Bridge Pattern)**兩個維度獨立變化,依賴方式實現抽象與實現分離:需要一個作為橋接的接口/抽象類,多個角度的實現類依賴注入到抽象類,使它們在抽象層建立一個關聯關系
外觀模式 (Facade Pattern)**在客戶端和復雜系統之間再加一層,這一次將調用順序、依賴關系等處理好。即封裝底層實現,隱藏系統的復雜性,并向客戶端提供了一個客戶端可以訪問系統的高層接口
代理模式 (Proxy Pattern)**為其他對象提供一種代理以控制對這個對象的訪問:增加中間層(代理層),代理類與底層實現類實現共同接口,并創建底層實現類對象(底層實現類對象依賴注入代理類),以便向外界提供功能接口
過濾器模式 (Filter、Criteria Pattern)**使用不同的標準來過濾一組對象,通過邏輯運算以解耦的方式把它們連接起來
組合模式 (Composite Pattern)**用戶對單個對象和組合對象的使用具有一致性的統一接口
享元模式 (Flyweight Pattern)**享元工廠類控制;HashMap實現緩沖池重用現有的同類對象,如果未找到匹配的對象,則創建新對象

行為型模式
這些設計模式特別關注對象之間的通信。
責任鏈模式(Chain of Responsibility Pattern)**攔截的類都實現統一接口,每個接收者都包含對下一個接收者的引用。將這些對象連接成一條鏈,并且沿著這條鏈傳遞請求,直到有對象處理它為止。
觀察者模式(Observer Pattern)**一對多的依賴關系,在觀察目標類里有一個 ArrayList 存放觀察者們。當觀察目標對象的狀態發生改變,所有依賴于它的觀察者都將得到通知,使這些觀察者能夠自動更新(即使用推送方式)
模板模式(Template Pattern)**將這些通用算法抽象出來,在一個抽象類中公開定義了執行它的方法的方式/模板。它的子類可以按需要重寫方法實現,但調用將以抽象類中定義的方式進行
命令模式(Command Pattern)**將"行為請求者"與"行為實現者"解耦:調用者依賴命令,命令依賴接收者,調用者Invoker→命令Command→接收者Receiver
解釋器模式(Interpreter Pattern):給定一個語言,定義它的文法表示,并定義一個解釋器,這個解釋器使用該標識來解釋語言中的句子
迭代器模式(Iterator Pattern):集合中含有迭代器:分離了集合對象的遍歷行為,抽象出一個迭代器類來負責,無須暴露該對象的內部表示
中介者模式(Mediator Pattern)**對象與對象之間存在大量的關聯關系,將對象之間的通信關聯關系封裝到一個中介類中單獨處理,從而使其耦合松散,可以獨立地改變它們之間的交互
策略模式(Strategy Pattern)**策略對象依賴注入到context對象,context對象根據它的策略改變而改變它的相關行為(可通過調用內部的策略對象實現相應的具體策略行為)
狀態模式(State Pattern)**狀態對象依賴注入到context對象,context對象根據它的狀態改變而改變它的相關行為(可通過調用內部的狀態對象實現相應的具體行為)
備忘錄模式(Memento Pattern):通過一個備忘錄類專門存儲對象狀態??蛻敉ㄟ^備忘錄管理類管理備忘錄類。
空對象模式(Null Object Pattern):創建一個未對該類做任何實現的空對象類,該空對象類將無縫地使用在需要檢查空值的地方。不要為了屏蔽null而使用空對象,應保持用null,遠比用非null的值來替代“無值”要好。(慎用)

(之后補上自己總結的)
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,316評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,481評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,241評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,939評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,697評論 6 409
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,182評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,247評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,406評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,933評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,772評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,973評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,516評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,209評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,638評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,866評論 1 285
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,644評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,953評論 2 373

推薦閱讀更多精彩內容

  • 設計模式匯總 一、基礎知識 1. 設計模式概述 定義:設計模式(Design Pattern)是一套被反復使用、多...
    MinoyJet閱讀 3,957評論 1 15
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,781評論 18 139
  • 1.抽象工廠: Factory提供一個創建一系列或相關依賴對象的接口,而無需指定他們具體的類。針對多級結構. 抽象...
    uiiang閱讀 2,888評論 0 2
  • 前言 GoF的23種設計模式,包括創建型、結構型和行為型,其涵蓋了面向對象思想的精髓以及諸多細節。本文結合《設計模...
    尤汐Yogy閱讀 4,380評論 0 38
  • 什么是設計模式 “每一個模式描述了一個在我們周圍不斷重復發生的問題,以及該問題的解決方案的核心。這樣,你就能一次又...
    茶色少年閱讀 928評論 0 1