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

原创 2016年06月01日 11:25:28

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

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

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

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

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

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


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

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

未完待续。。。


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

使用Object-C实现23种设计模式之抽象工厂模式

23种设计模式的OC实现,23种设计模式之抽象工厂模式。

Object-C 学习笔记(六)---单例设计模式

说到单例,在java学习07-单例设计模式已经说的很清楚,Object-C也是一门面向对象的语言,于是除了写法不同,其他都是大同小异. ---未来会出一套 "设计模式"学习的笔记 原则: (1) ...

23种设计模式--适配器模式

  • 2013-01-26 11:00
  • 26.28MB
  • 下载

Java23种设计模式--Adapter(适配器)

实例场景:我们以前的电脑上键盘的usb接口有的是圆形的,现在假如这个接口坏了,用户想要更换一个,但市场上基本上是方形usb接口,很无赖,配不上号,这时,店主告诉用户不用担心,买一个转换器就行,转换器可...

Java23种设计模式--Adapter(适配器)

实例场景:我们以前的电脑上键盘的usb接口有的是圆形的,现在假如这个接口坏了,用户想要更换一个,但市场上基本上是方形usb接口,很无赖,配不上号,这时,店主告诉用户不用担心,买一个转换器就行,转换器可...

c++设计模式(五)Adapter class/object 适配器

在c++中什么是适配器呢?           先来看个例子:对于笔记本电脑,每台都有一个适配器,这个适配器干什么呢?就是给笔记本提供合适的电压,因为不同的国家民用电压标准不同,美国是110,中国是2...

Object-C 中实现 Singleton (单例) 模式

撰写本文参考于网上的一些帖子,资料,文档。 关于 面向对象的设计模式 对于面向对象的设计模式,想必大家并不陌生吧。 纵观23种设计模式中,数单例模式(Singleton)...

Object-C 中实现 Singleton (单例) 模式

撰写本文参考于网上的一些帖子,资料,文档。 关于 面向对象的设计模式 对于面向对象的设计模式,想必大家并不陌生吧。 纵观23种设计模式中,数单例模式(Singleton)和工厂模式(Fa...

几种语言的单例模式的实现(C++/C#/Object-C)

几种语言的单例模式(C++/C#/Object-C)
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)