用OC代碼認識設(shè)計模式(一)--創(chuàng)建型模式
用OC代碼認識設(shè)計模式(二)--結(jié)構(gòu)型模式
用OC代碼認識設(shè)計模式(三)--行為型模式
用OC代碼認識六大設(shè)計原則
結(jié)構(gòu)型模式
1、適配器模式
定義:將一個類的接口轉(zhuǎn)換成客戶希望的另外一個接口。適配器模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。
有兩種類型:類適配器、對象適配器
(1)類適配器(Adapter)
IOS設(shè)計模式淺析之適配器模式(Adapter)
定義:類適配器是通過繼承來適配兩個接口,(OC沒有多重繼承,用協(xié)議)
Demo例子:
// Target.h 協(xié)議
@protocol Target <NSObject>
- (void)request;
@end
@implementation Adaptee
- (void)specificRequest
{
NSLog(@"specificRequest");
}
// 適配對象,繼承Adaptee類,現(xiàn)實Target協(xié)議
// Adapter.h
@interface Adapter : Adaptee<Target>
@end
// Adapter.m
@implementation Adapter
- (void)request
{
[self specificRequest];
}
@end
使用代碼:
Adapter *target = [[Adapter alloc] init];
[target request];
(2)對象適配器
定義:對象適配器不繼承被適配者,而是組合了一個對它的引用。
// Target.h 協(xié)議
@protocol Target <NSObject>
- (void)request;
@end
@implementation Adaptee
- (void)specificRequest
{
NSLog(@"specificRequest");
}
// 適配對象,持有Adaptee對象,現(xiàn)實Target協(xié)議
// Adapter.h
@interface Adapter :<Target>
@property (nonatomic, strong) Adaptee *daptee;
@end
// Adapter.m
@implementation Adapter
- (void)request
{
[_adaptee specificRequest];
}
@end
使用代碼:
Adapter *target = [[Adapter alloc] init];
target.abaptee = [[Adaptee alloc] init];
[target request];
最后兩者區(qū)別就是:一個是繼承Adaptee類,一個是持有abaptee對象
2、橋接模式
定義:將抽象部分與它的實現(xiàn)部分分離,使它們都可以獨立地變化
一般的設(shè)計模式

當我們增加一個手機品牌HTC,按照品牌分類的話我們需要增加手機品牌類HTC,還需要增加兩個手機軟件類HTC的QQ、HTC的微信;同樣,如果需要增加一個手機軟件,那么按照手機軟件分類的話,我們也是需要增加三個類。當我們需要增加更多的手機品牌和手機軟件時,我們會發(fā)現(xiàn)類會越來越多,以致無法維護。
橋接的設(shè)計模式:

代碼截圖:

3、裝飾器模式
裝飾模式能動態(tài)的給一個對象添加一些額外的職責(zé)。就增加功能來說,裝飾模式會比通過繼承生成子類更為靈活。
OC的Category 就是裝飾器模式的一種應(yīng)用
4、組合模式
定義:將對象組合成樹形結(jié)構(gòu)以表示‘部分-整體’的層次結(jié)構(gòu)。組合模式使得用戶對單個對象和組合對象的使用具有一致性。
代碼截圖:

5、外觀模式
定義:外觀模式要求一個子系統(tǒng)的外部與內(nèi)部的通信必須通過一個統(tǒng)一的對象進行。外觀模式提供一個高層次的接口,用來訪問子系統(tǒng)中的一群接口。
代碼截圖:
綠框就是:提供一個高層次的接口,用來訪問子系統(tǒng)中的一群接口

6、享元模式
定義:運用共享技術(shù)有效地支持大量細粒度的對象。
OC代碼:UITableViewCell 重用機制就是享元模式的典型應(yīng)用
簡單的代碼:

7、代理模式
定義:為其他對象提供一種代理以控制對這個對象的訪問(這個和對象適配器模式差不多)
代碼截圖:
