設計模式概要

創(chuàng)建型模式:工廠模型锣笨,抽象工廠模型,建造模型悟耘,原型模型混卵,單例模型秉宿,
結(jié)構(gòu)型模式:適配器,橋椭岩,組合模型,
行為型設計模式:命令模型,迭代模型判哥,觀察者模型献雅。
名詞解釋
設計模式
是一套被反復使用、多數(shù)人知曉的姨伟、經(jīng)過分類編目的惩琉、代碼設計經(jīng)驗的總結(jié)。使用設計模式是為了可重用代碼夺荒、 讓代碼更容易被他人理解瞒渠、保證代碼可靠性。

image.png

抽象工廠

image.png

1技扼、工廠方法模式完全符合“開閉原則”伍玖。
2、工廠方法模式使用繼承剿吻,將對象的創(chuàng)建委托給子類窍箍,通過子類實現(xiàn)工廠方法來創(chuàng)建對象。
3丽旅、工廠方法允許類將實例化延伸到子類進行椰棘。
4、工廠方法讓子類決定要實例化的類時哪一個榄笙。在這里我們要明白這并不是工廠來決定生成哪種產(chǎn)品邪狞,而是在編寫創(chuàng)建者類時,不需要知道實際創(chuàng)建的產(chǎn)品是哪個茅撞,選擇了使用哪個子類帆卓,就已經(jīng)決定了實際創(chuàng)建的產(chǎn)品時哪個了。
5米丘、在工廠方法模式中剑令,創(chuàng)建者通常會包含依賴于抽象產(chǎn)品的代碼,而這些抽象產(chǎn)品是拄查、由子類創(chuàng)建的吁津,創(chuàng)建者不需要真的知道在制作哪種具體產(chǎn)品。

2ZOA~U}S}~[]XPJ7$F1MTUU.png

工廠方法模式
一個抽象產(chǎn)品類靶累,可以派生出多個具體產(chǎn)品類腺毫。
一個抽象工廠類,可以派生出多個具體工廠類挣柬。
每個具體工廠類只能創(chuàng)建一個具體產(chǎn)品類的實例潮酒。
抽象工廠模式
多個抽象產(chǎn)品類,每個抽象產(chǎn)品類可以派生出多個具體產(chǎn)品類邪蛔。
一個抽象工廠類急黎,可以派生出多個具體工廠類。
每個具體工廠類可以創(chuàng)建多個具體產(chǎn)品類的實例。
區(qū)別
工廠方法模式只有一個抽象產(chǎn)品類勃教,而抽象工廠模式有多個淤击。
工廠方法模式的具體工廠類只能創(chuàng)建一個具體產(chǎn)品類的實例,而抽象工廠模式可以創(chuàng)建多個

原型模式

image.png
AYHB[M{I~J7WN86VP8L]Q}N.png

(1)Prototype(抽象原型類):聲明克隆方法的接口故源,是所有具體原型類的公共父類污抬,它可是抽象類也可以是接口,甚至可以是具體實現(xiàn)類绳军。
(2)ConcretePrototype(具體原型類):它實現(xiàn)抽象原型類中聲明的克隆方法印机,在克隆方法中返回自己的一個克隆對象。
(3)Client(客戶端):在客戶類中门驾,讓一個原型對象克隆自身從而創(chuàng)建一個新的對象射赛。

原型模式的優(yōu)缺點:

優(yōu)點:(1):當創(chuàng)建對象的實例較為復雜的時候,使用原型模式可以簡化對象的創(chuàng)建過程奶是,通過復制一個已有的實例可以提高實例的創(chuàng)建效率楣责。

(2):擴展性好,由于原型模式提供了抽象原型類聂沙,在客戶端針對抽象原型類進行編程秆麸,而將具體原型類寫到配置文件中,增減或減少產(chǎn)品對原有系統(tǒng)都沒有影響及汉。

(3):原型模式提供了簡化的創(chuàng)建結(jié)構(gòu)蛔屹,工廠方法模式常常需要有一個與產(chǎn)品類等級結(jié)構(gòu)相同的工廠等級結(jié)構(gòu),而原型模式不需要這樣豁生,圓形模式中產(chǎn)品的復制是通過封裝在類中的克隆方法實現(xiàn)的,無需專門的工廠類來創(chuàng)建產(chǎn)品漫贞。

(4):可以使用深克隆方式保存對象的狀態(tài)甸箱,使用原型模式將對象復制一份并將其狀態(tài)保存起來,以便在需要的時候使用(例如恢復到歷史某一狀態(tài))迅脐,可輔助實現(xiàn)撤銷操作芍殖。

缺點:(1):需要為每一個類配置一個克隆方法,而且該克隆方法位于類的內(nèi)部谴蔑,當對已有類進行改造的時候豌骏,需要修改代碼,違反了開閉原則隐锭。

(2):在實現(xiàn)深克隆時需要編寫較為復雜的代碼窃躲,而且當對象之間存在多重簽到引用時,為了實現(xiàn)深克隆钦睡,每一層對象對應的類都必須支持深克隆蒂窒,實現(xiàn)起來會比較麻煩。

原型模式的適用環(huán)境:

1:創(chuàng)建新對象成本較大(例如初始化時間長,占用CPU多或占太多網(wǎng)絡資源)洒琢,新對象可以通過復制已有對象來獲得秧秉,如果相似對象,則可以對其成員變量稍作修改衰抑。

2:系統(tǒng)要保存對象的狀態(tài)象迎,而對象的狀態(tài)很小。

3:需要避免使用分層次的工廠類來創(chuàng)建分層次的對象呛踊,并且類的實例對象只有一個或很少的組合狀態(tài)砾淌,通過復制原型對象得到新實例可以比使用構(gòu)造函數(shù)創(chuàng)建一個新實例更加方便。

單例模式

image.png

![E~Q(VQ@QP19)5C9{(LNY]BV.png](http://upload-images.jianshu.io/upload_images/6358919-293f4f1943b3a923.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

一般包含三個要素:

1.私有的靜態(tài)的實例對象 private static instance

2.私有的構(gòu)造函數(shù)(保證在該類外部恋技,無法通過new的方式來創(chuàng)建對象實例) private Singleton(){}

3.公有的拇舀、靜態(tài)的、訪問該實例對象的方法 public static Singleton getInstance(){}

適配器模式

image.png
$D7I)LNL(186{QG@3TII0)U.png

OQ2DD4O%56ZRGX6$Q`2OS3L.png

Target目標角色

該角色定義把其他類轉(zhuǎn)換為何種接口蜻底,也就是我們期望的接口骄崩。

● Adaptee源角色

源角色是已經(jīng)存在的、運行良好的類或?qū)ο蟊「ǎ?jīng)過適配器角色的包裝要拂,它會成為一個嶄新亮麗的角色。

● Adapter適配器角色

適配器模式的核心角色站楚,其他兩個角色都是已經(jīng)存在的角色脱惰,而適配器角色是需要新建立的,它的職責非常簡單:通過繼承或是類關(guān)聯(lián)的方式窿春,把源角色轉(zhuǎn)換為目標角色拉一。

適配器模式的優(yōu)點:
● 適配器模式可以讓兩個沒有任何關(guān)系的類在一起運行,只要適配器這個角色能夠搞定他們就成
● 增加了類的透明性
高層模塊訪問的是Target目標角色旧乞,具體的業(yè)務實現(xiàn)的是Adaptee源角色蔚润。
● 提高了類的復用度
Adaptee源角色在原有系統(tǒng)中還可以正常使用,而在目標角色中也可以充當新的角色尺栖。
● 靈活性非常好
如果不需要適配器了嫡纠,刪除適配器就可以了,其他的代碼都不用修改延赌〕担基本上就類似一個靈活的構(gòu)件,想用就用挫以,不想就卸載者蠕。
適配器模式的使用場景:
要修改一個己經(jīng)投產(chǎn)中的接口時,適配器模式可能是最適合的模式了掐松。
適配器模式的注意事項:
適配器模式最好在詳細設計階段不要考慮它蠢棱,它不是為了解決還處在開發(fā)階段的問題锌杀,而是解決正在服役的項目問題,沒有一個系統(tǒng)分析師會在做詳細設計的時候考慮使用適配器模式泻仙,這個模式使用的主要場景是擴展應用中糕再。

組合模式

image.png
0%}[O6WY8HEGBW]_E`6O1U1.png

![A[)(NI8ZE6P36M4AP(@$X0.png

組合模式的透明性與安全性

image.png

在類層次結(jié)構(gòu)的根部定義子節(jié)點管理接口的方法具有良好的透明性,因為你可以一致地使用所有的組件玉转,但是這一方法是以安全性為代價的突想,因為客戶有可能會做一些無意義的事情。
命令模式

image.png
Z4$Y03KUDZ5A@JKHU37M1UU.png

迭代模式

image.png

![L{[GGH@U0%R4KPVJ(`[$$T.png

觀察者模式

image.png

![`%31F4L)1YAZCDJC4E]2Q8P.png](http://upload-images.jianshu.io/upload_images/6358919-09205c07c8dad861.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末究抓,一起剝皮案震驚了整個濱河市猾担,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌刺下,老刑警劉巖绑嘹,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異橘茉,居然都是意外死亡工腋,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門畅卓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來擅腰,“玉大人,你說我怎么就攤上這事翁潘〕酶裕” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵拜马,是天一觀的道長渗勘。 經(jīng)常有香客問我,道長俩莽,這世上最難降的妖魔是什么呀邢? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮豹绪,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘申眼。我一直安慰自己瞒津,他們只是感情好,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布括尸。 她就那樣靜靜地躺著巷蚪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪濒翻。 梳的紋絲不亂的頭發(fā)上屁柏,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天啦膜,我揣著相機與錄音,去河邊找鬼淌喻。 笑死僧家,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的裸删。 我是一名探鬼主播八拱,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼涯塔!你這毒婦竟也來了肌稻?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤匕荸,失蹤者是張志新(化名)和其女友劉穎爹谭,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體榛搔,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡诺凡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了药薯。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绑洛。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖童本,靈堂內(nèi)的尸體忽然破棺而出真屯,到底是詐尸還是另有隱情,我是刑警寧澤穷娱,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布绑蔫,位于F島的核電站,受9級特大地震影響泵额,放射性物質(zhì)發(fā)生泄漏配深。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一嫁盲、第九天 我趴在偏房一處隱蔽的房頂上張望篓叶。 院中可真熱鬧,春花似錦羞秤、人聲如沸缸托。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽俐镐。三九已至,卻和暖如春哺哼,著一層夾襖步出監(jiān)牢的瞬間佩抹,已是汗流浹背叼风。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留棍苹,地道東北人无宿。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像廊勃,于是被迫代替她去往敵國和親懈贺。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 設計模式匯總 一坡垫、基礎知識 1. 設計模式概述 定義:設計模式(Design Pattern)是一套被反復使用梭灿、多...
    MinoyJet閱讀 3,947評論 1 15
  • 設計模式基本原則 開放-封閉原則(OCP),是說軟件實體(類冰悠、模塊堡妒、函數(shù)等等)應該可以拓展,但是不可修改溉卓。開-閉原...
    西山薄涼閱讀 3,798評論 3 14
  • 1大同小異的工作周報 Sunny軟件公司一直使用自行開發(fā)的一套OA (Office Automatic皮迟,辦公自動化...
    justCode_閱讀 1,156評論 0 3
  • 1 場景問題# 1.1 訂單處理系統(tǒng)## 考慮這樣一個實際應用:訂單處理系統(tǒng)。 現(xiàn)在有一個訂單處理的系統(tǒng)桑寨,里面有個...
    七寸知架構(gòu)閱讀 4,425評論 3 63
  • 一伏尼、設計模式的分類 總體來說設計模式分為三大類: 創(chuàng)建型模式,共五種:工廠方法模式尉尾、抽象工廠模式爆阶、單例模式、建造者...
    RamboLI閱讀 749評論 0 1