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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值