今天和大家分享的是适配器模式。适配器模式很简单,想必很多同学可能已经用过。好的,还是先给出简短的定义吧。
适配器模式(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;
}
|
好啦,今天的代码很简短吧,呵呵。