創(chuàng)建型模式:工廠模型锣笨,抽象工廠模型,建造模型悟耘,原型模型混卵,單例模型秉宿,
結(jié)構(gòu)型模式:適配器,橋椭岩,組合模型,
行為型設計模式:命令模型,迭代模型判哥,觀察者模型献雅。
名詞解釋
設計模式:
是一套被反復使用、多數(shù)人知曉的姨伟、經(jīng)過分類編目的惩琉、代碼設計經(jīng)驗的總結(jié)。使用設計模式是為了可重用代碼夺荒、 讓代碼更容易被他人理解瞒渠、保證代碼可靠性。
抽象工廠
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)品。
工廠方法模式:
一個抽象產(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)建多個
原型模式
(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)建一個新實例更加方便。
單例模式
![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(){}
適配器模式
●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)分析師會在做詳細設計的時候考慮使用適配器模式泻仙,這個模式使用的主要場景是擴展應用中糕再。
組合模式
![A[)(NI8ZE6P36M4AP(@$X0.png
組合模式的透明性與安全性
在類層次結(jié)構(gòu)的根部定義子節(jié)點管理接口的方法具有良好的透明性,因為你可以一致地使用所有的組件玉转,但是這一方法是以安全性為代價的突想,因為客戶有可能會做一些無意義的事情。
命令模式
迭代模式
![L{[GGH@U0%R4KPVJ(`[$$T.png
觀察者模式
![`%31F4L)1YAZCDJC4E]2Q8P.png](http://upload-images.jianshu.io/upload_images/6358919-09205c07c8dad861.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)