Objective C 適配器模式

適配器模式(Adapter),將一個類的接口轉換成客戶希望的另外一個接口。Adapter模式使得原本由於接口不兼容而不能一起工作的那些類可以一起工作。

   適配器模式主要解決了什麼問題呢?

   答:系統的數據和行爲都正確,但接口不符時,我們應該考慮適配器,目的是使控制範圍之外的一個原有對象與某個接口匹配。適配器模式主要應用於希望複用一些現存的類,但是接口又與複用環境要求不一致的情況。

   其實,簡單的說,就是需要的東西就在面前,但卻不能使用,而短時間又無法改造它,於是我們就想辦法適配它。

   在GoF的設計模式中,對適配器模式講了兩種類型,類適配器模式和對象適配器模式,由於類適配器模式通過多重繼承對接一個接口與另一個接口進行適配,而Objective C語言不支持多重繼承(協議除外,:D),所以這裏還是先分享一下對象適配器吧,有興趣的同學可以找找相關資料。

   好的,讓我們看一看他的類結構圖吧。


   看起來不難吧,搞了那麼多的專業術語,其實就是對接口的再一次封裝而已。好吧,不囉嗦了,下面就展示一下代碼吧。

  • Target類接口

1
2
3
4
5
#import <Foundation/Foundation.h>
                 
@interface Target:NSObject
-(void)Request;
@end
  • Target類實現

1
2
3
4
5
6
7
8
9
#import "Target.h"
               
@implementation Target
               
-(void)Request{
    NSLog(@"普通請求!");
}
               
@end
  • Adaptee類接口

1
2
3
4
5
6
7
#import <Foundation/Foundation.h>
             
@interface Adaptee:NSObject
             
-(void)SpecificRequest;
             
@end
  • Adaptee類實現

1
2
3
4
5
6
7
8
9
#import "Adaptee.h"
           
@implementation Adaptee
           
-(void)SpecificRequest{
    NSLog(@"特殊請求!");
}
           
@end
  • Adapter類接口

1
2
3
4
5
6
7
#import "Target.h"
         
@class Adaptee;
@interface Adapter :Target{
    Adaptee *adaptee;
}
@end
  • Adapter類實現

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#import "Adapter.h"
#import "Adaptee.h"
       
@implementation Adapter
       
-(id)init{
    if (self == [super init]) {
        adaptee = [[Adaptee alloc]init];
    }
    return self;
}
-(void)Request{
    [adaptee SpecificRequest];
}
       
@end
  • Main方法調用

1
2
3
4
5
6
7
8
9
10
11
#import <Foundation/Foundation.h>
#import "Adapter.h"
     
int main(int argc,const char *argv[])
{
   @autoreleasepool{
        Target *target = [[Adapter alloc]init];
        [target Request];
    }
return 0;
}

發佈了37 篇原創文章 · 獲贊 4 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章