創(chuàng)建型的設計模式講解完畢了户辞,今天開始結構型設計模式。
定義
在計算機編程中奉呛,適配器模式(有時候也稱包裝樣式或者包裝)將一個類的接口適配成用戶所期待的胯陋。一個適配允許通常因為接口不兼容而不能在一起工作的類工作在一起,做法是將類自己的接口包裹在一個已存在的類中扒磁。
模式分類
- 對象適配器模式
在這種適配器模式中庆揪,適配器容納一個它包裹的類的實例。在這種情況下渗磅,適配器調用被包裹對象的物理實體。
- 類適配器模式
這種適配器模式下检访,適配器繼承自已實現(xiàn)的類(一般多重繼承)始鱼。
適配器就是一種適配中間件,它存在于不匹配的二者之間脆贵,用于連接二者医清,將不匹配變得匹配,簡單點理解就是平常所見的轉接頭卖氨,轉換器之類的存在会烙。
使用場景
- 系統(tǒng)需要使用現(xiàn)有的類,而此類接口不符合系統(tǒng)的需要,即接口不兼容
- 想要建立一個可重復使用的類,用于關聯(lián)彼此沒有太大關聯(lián)的一些類(包括即將引入的類)
- 需要一個統(tǒng)一的輸出接口,而輸入端類型不確定.
總結來說就兩點
1.輸入端不變,那么輸出端改變
2.輸入端變化筒捺,那么輸出端不變
場景描述
我從美國帶回來一個美國插頭柏腻,美國插頭是三角插頭的。但是中國家里的插座都是兩角插座系吭。因此我需要將美國插頭五嫂,改裝成可以兩角插座可以用的兩角插頭
適配器模式 類UML圖
類對象適配器UML圖
代碼
#import <Foundation/Foundation.h>
@protocol AmericaPower <NSObject>
-(void)threeStep;
@end
#import <Foundation/Foundation.h>
#import "AmericaPower.h"
@interface APower : NSObject<AmericaPower>
@end
#import "APower.h"
@implementation APower
-(void)threeStep{
NSLog(@"我是三角電源");
}
@end
#import <Foundation/Foundation.h>
@protocol ChinaPower <NSObject>
-(void)twoStep;
@end
#import <Foundation/Foundation.h>
#import "ChinaPower.h"
#import "APower.h"
@interface CPower :APower <ChinaPower>
@end
#import "CPower.h"
@implementation CPower
-(void)twoStep{
[self threeStep];
}
@end
測試代碼
///類對象適配
[[CPower new] twoStep];
測試結果
2018-04-08 14:49:40.712315+0800 結構型設計模式-適配器模式[25250:7129936] 我是三角電源
適配器模式 對象UML圖
對象適配器UML圖
對象適配器代碼
#import <Foundation/Foundation.h>
#import "APower.h"
#import "ChinaPower.h"
@interface CObjectPower : NSObject<ChinaPower>
@end
#import "CObjectPower.h"
@implementation CObjectPower
-(void)twoStep{
[[APower new] threeStep];
}
@end
測試代碼
[[CObjectPower new]twoStep];
測試結果
2018-04-08 14:49:40.712508+0800 結構型設計模式-適配器模式[25250:7129936] 我是三角電源
總結
這兩者之間的區(qū)別是類適配器是繼承了實例對象,獲取了實例對象的功能。
對象適配器是在內(nèi)部實例化了一個實例對象沃缘,沒有實例對象的功能躯枢。
參考
百度百科
下一篇博客地址
結構型設計模式-橋接模式