首先我們需要了什么的結構型模式焚鲜,其實結構型模式就是涉及到類或者對象之間的組合關系。
1.橋接模式
主要解決:在有多種可能會變化的情況下放前,用繼承會造成類爆炸問題忿磅,擴展起來不靈活
1.1定義
將抽象部分和實現(xiàn)部分分離,使它們都可以獨立第進行變化
1.2 UML
- Abstraction:抽象部分凭语,需要保存一個實現(xiàn)部分的引用
- RefinedAbstraction:優(yōu)化的抽象部分葱她,抽象部分的具體實現(xiàn),方法的完善和擴展似扔。
- Implementor:實現(xiàn)部分览效,可以是接口也可以是抽象類
- ConcteteImplementor:具體的實現(xiàn)部分
1.3 使用場景
一個類存在兩個維度,而且每個維度都可以擴展虫几。
比如不同的廠商生產(chǎn)的電腦和顯示器的尺寸就是兩個維度锤灿。
1.4代碼實現(xiàn)
A.實現(xiàn)部分
B.抽象部分
C.調用部分
如果需要擴展,如果是實現(xiàn)部分擴展只要在實現(xiàn)部分擴展一個具體的實現(xiàn)類辆脸。在調用的時候出入到抽象部分就可以了但校。
1.4 android源碼中的實現(xiàn)
2.外觀模式
2.1定義
要求一個子系統(tǒng)的外部與其內部的通訊必須通過一個統(tǒng)一的對象進行。外觀模式提供一個高層次的接口啡氢,使得子系統(tǒng)更易于使用状囱。
2.2 UML
Facade:系統(tǒng)對外的統(tǒng)一接口,系統(tǒng)內部系統(tǒng)地工作
SystemA:子系統(tǒng)接口
2.3 使用場景
- 為一個復雜子系統(tǒng)提供一個簡單接口
- 當你需要構建以個層次結構的子系統(tǒng)時倘是,使用Facade模式定義子系統(tǒng)中每層的入口點
當我們在開發(fā)SDK的時候經(jīng)常用到這種模式亭枷。
2.4 代碼實現(xiàn)
A 子系統(tǒng)
B.統(tǒng)一對外接口
2.5 android源碼中實現(xiàn)
ContextWrapper以供用戶訪問,該類只能是一個對外的封裝類搀崭,其內部是調用ContextImpl對象實現(xiàn)的叨粘。這就和外觀模式UML是一致的猾编。
2.6優(yōu)缺點
優(yōu)點
- 1.對客戶隱藏了子系統(tǒng)的細節(jié)
- 2.外觀類對子系統(tǒng)的接口封裝,系統(tǒng)更容易使用
缺點
- 1.外觀類接口膨脹
- 2.外觀類沒有遵循開閉原則升敲,當業(yè)務出現(xiàn)更改時答倡,可能需要更改外觀類。