关闭

使用Object-C实现23种设计模式之适配器模式

1301人阅读 评论(0) 收藏 举报
分类:

首先,大家先看一下适配器模式的定义:把一个类的接口转换成客户希望的另外一个接口,从而使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

看上面一句话,个人觉得并不是多么的通俗易懂,反正当时我研究适配器模式的时候,读了好多遍都没有懂,话不多说,下面上通俗易懂的实例。

用过苹果电脑的人应该知道,购买苹果电脑时,官方标配中,有一个两个插头的充电线,另外,还有一个三插头的扩展线,那么这个三插头的扩展线具体有什么用处呢?

首先,能够起到充电线的延长作用,这个毋庸置疑,当时导购员就是这么给我介绍的(但是最主要的功能不是这个,导购员欺负我读书少>-<),这个三插头的扩展线的主要功能就是,当你的电脑没电而身边可用的插座只有三插口的插座时,可以用这个扩展线来连接充电器,达到充电的目的,假如没有这么个三插头的扩展线,只能面临着一个有插座,有充电器而因为两者不适配无法充电的窘境,在这里,三插头的扩展线充当的就是适配器的角色。

适配器模式中至少有三个角色:

1.目标接口(协议):即客户所期待的接口,也可以说是可以满足当前需要的接口,在上述例子中,三插口插座所期待的三插头充电器既是目标接口,但三插头充电器并不存在。

2.需要被适配的类:不符合现有条件,但是需要使用的类,在此处,两插头的充电器即为需要被适配的类。

3.适配器:具有将不符合条件的但切实需要的类转换为符合条件的类的功能的类,在此处,即三插头扩展线。

下边看具体代码实现:

两插头充电器类

Two.h(英语水平如此,凑活着吧)

#import <Foundation/Foundation.h>

@interface Two : NSObject//需要适配的类
-(void)chargeUseTwo;
@end

Two.m

#import "Two.h"

@implementation Two
-(void)chargeUseTwo{
    NSLog(@"用两插头充电!");
}
@end

三插头扩展线

Three.h

#import <Foundation/Foundation.h>

@protocol Three <NSObject>
@required
-(void)chargeUseThree;
@end

适配器类:


Adapter.h

#import <Foundation/Foundation.h>
#import "Three.h"
#import "Two.h"
@interface Adapter : NSObject<Three>{
@private Two *_two;
}
@end

Adapter.m

#import "Adapter.h"
@implementation Adapter
-(void)chargeUseThree{
    _two = [[Two alloc]init];
    [_two chargeUseTwo];
}
@end

测试:

main.m


#import <Foundation/Foundation.h>
#import "Adapter.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSObject<Three> *three = [[Adapter alloc]init];
        [three chargeUseThree];
    }
    return 0;
}

程序运行结果:

2016-06-01 10:39:58.822 设计模式之六适配器模式[989:68811]用两插头充电!

Program ended with exit code: 0


测试成功,达到了使用三孔插座,适配器,两插头充电器给手机充电的目的。

以上为我个人对适配器模式的简单理解,如有不到之处,敬请指正。

未完待续。。。


0
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:14088次
    • 积分:280
    • 等级:
    • 排名:千里之外
    • 原创:13篇
    • 转载:0篇
    • 译文:0篇
    • 评论:2条
    文章分类
    文章存档