最近一直在看設(shè)計(jì)模式方面的書(shū),看完了第一部分接口型模式,下面是我的一些個(gè)人理解:
1. Adapter(適配器)模式
我的理解就是怎樣通過(guò)調(diào)用已經(jīng)存在的方法來(lái)解決客戶(hù)給我們的問(wèn)題,這里的調(diào)用已經(jīng)存在的方法就是java中的復(fù)用代碼,可以通過(guò)組合和繼承來(lái)實(shí)現(xiàn)。換句話(huà)說(shuō),就是引用或者繼承現(xiàn)有的方法類(lèi)來(lái)適配客戶(hù)提供來(lái)的問(wèn)題接口。
2. Facade(外觀)模式
定位于內(nèi)部組件和外部客戶(hù)程序之間,用于二者間的橋梁。中間類(lèi)的建立主要面向外部客戶(hù)程序,為其提供功能接口,其方法體通過(guò)調(diào)用內(nèi)部組件來(lái)實(shí)現(xiàn)。這樣不僅簡(jiǎn)化了調(diào)用關(guān)系,還在一定程度上達(dá)到了“解耦”的效果。
3. Composite(組合)模式
主要解決客戶(hù)在處理單個(gè)對(duì)象和組合對(duì)象上的接口一致性。具體的解決方法就是使用將對(duì)象用“樹(shù)型結(jié)構(gòu)”組織起來(lái),以達(dá)成“部分-整體”的層次結(jié)構(gòu)。通過(guò)遍歷(Iterator)整個(gè)樹(shù)型結(jié)構(gòu),獲取所有的對(duì)象。
4. Bridge(橋接)模式
進(jìn)一步的將抽象化與實(shí)現(xiàn)化“解耦”。橋梁模式中的所謂脫耦,就是指在一個(gè)軟件系統(tǒng)的抽象化和實(shí)現(xiàn)化之間使用組合/聚合關(guān)系而不是繼承關(guān)系,從而使兩者可以相對(duì)獨(dú)立地變化。
抽象化角色(Abstraction)引用了實(shí)現(xiàn)化角色(Implementor)的接口,并且抽象了客戶(hù)的功能接口(面向客戶(hù))。
實(shí)現(xiàn)化角色(Implementor)抽象出底層操作(面向底層)。
Composite(組合)模式
意圖在與:讓用戶(hù)能夠使用統(tǒng)一的接口處理單個(gè)對(duì)象以及對(duì)象組合
理解:
Component類(lèi)抽象出Leaf類(lèi)和Composite類(lèi)共享的公共接口,在Composite類(lèi)中使用遞歸(iterator)定義關(guān)于對(duì)象組合的方法。
個(gè)人感覺(jué):composite模式就是定義一個(gè)統(tǒng)一的接口既可以處理單個(gè)對(duì)象,又可以處理對(duì)象的組合。其中對(duì)組合對(duì)象的處理又不斷被細(xì)分到對(duì)其中所包含的單個(gè)對(duì)象的處理,(使用遞歸遍歷各個(gè)結(jié)點(diǎn))。
Facade(外觀)模式
旨在提供一個(gè)接口,使子系統(tǒng)更加容易使用
Before Facade
Using Facade
Facade模式 與 Adapter模式
相似:為既存的類(lèi)提供界面統(tǒng)一的接口,以供外部類(lèi)調(diào)用
不同:Facade模式的目的是簡(jiǎn)化調(diào)用關(guān)系
Adapter模式是為不同的模塊/子系統(tǒng)提供一個(gè)統(tǒng)一的接口(支持多態(tài)),旨在將一個(gè)或多個(gè)已經(jīng)存在的不統(tǒng)一的接口轉(zhuǎn)化為另一個(gè)統(tǒng)一的接口
Adapter(適配器)模式
旨在保留現(xiàn)有類(lèi)所提供的服務(wù),向客戶(hù)提供接口,以滿(mǎn)足客戶(hù)的期望
即存在方法類(lèi),并可以提供給客戶(hù)的需求接口
理解1.類(lèi)適配器
通過(guò)繼承得到已存方法類(lèi)的方法使用權(quán)去實(shí)現(xiàn)所需的客戶(hù)接口
理解2.對(duì)象適配器
擴(kuò)展一個(gè)客戶(hù)所需的目標(biāo)類(lèi),并把它委派給一個(gè)現(xiàn)有的方法類(lèi)去實(shí)現(xiàn)
區(qū)別:
類(lèi)適配器是擴(kuò)展一個(gè)現(xiàn)有的類(lèi),并實(shí)現(xiàn)一個(gè)目標(biāo)接口
對(duì)象適配器是擴(kuò)展一個(gè)目標(biāo)類(lèi),并把它委派給一個(gè)現(xiàn)有的類(lèi)