美文网首页
适配器模式

适配器模式

作者: 泥孩儿0107 | 来源:发表于2017-12-13 21:02 被阅读0次

买过港版iPhone的人都知道,港版iPhone的充电器使用的是英标,与内地的国标标准不通用。因此,如果想在内地使用港版的充电器,就必须再买个转接头,使港版充电器的插头能够与国标插口“适配”。这个转接头的功能即类似于我们这里提到的“适配器”。

在软件设计中,已有的类与新接口之间不兼容的问题相当常见,同时,我们又不想为新的接口而重写现有的类。此时,就需要用到“适配器模式”。

定义:将一个类的接口转换为客户希望的另一个接口,它使得原来由于兼容问题不能一起工作的那些类可以一起工作。(《设计模式》,Addison Wesley,1994)。

通常,适配器模式有两种实现方式:类适配器,对象适配器。

1、类适配器

类适配器主要通过继承来适配两个接口,在Objective-C中,多重继承可以通过实现协议,同时又继承基类来实现。要在OC中实现类适配器,首先要有客户端要使用的一套行为的协议,然后要用具体的适配器类来实现该协议,同时适配器类也要继承被适配者。如下图所示。

Adapter是一个Target(目标接口)类型,同时也是一个Adaptee(被适配的类)类型。Adapter重载Target的request方法,但没有重载Adaptee的specificRequest方法,而是在其request方法中调用父类的specificRequest方法(即:[super specificRequest])。当request方法在运行时,向Adaptee发送super消息时,Adaptee按自己的方式执行specificRequest方法。注意:只有当Target是协议而不是类时,类适配器才能用Objective-C实现。

由于类适配器模式采用多继承方式实现,在一定程度上增加了程序的耦合性,而且OC语言本身并不支持多重继承,只能通过实现协议并继承父类来实现。因此,在OC中较常用的还是下一种:对象适配器模式。

2、对象适配器

与类适配器不同的是,对象适配器不继承被适配的类,而是组合了一个对被适配的类的引用,如图所示。

Target和Adapter之间的关系与类适配器相同,而Adapter和Adaptee之间的关系从“属于(继承)”变成了“包含(组合引用)”。这种情况下Adapter持有一个对Adaptee的引用,在request方法中,Adapter发送[adaptee specificRequest]消息,以间接方法Adaptee的specificRequest方法,然后实现客户端请求的其他部分。

示例代码如下:

Target:

[objc]view plaincopy

@protocolTargetDelegate 

@optional

-(void)request;

@end

@interfaceTarget

@property(weak,nonatomic)iddelegate;

@end

@implementation

...

// 通知代理,调用相应的方法

if(_delegate && [_delegaterespondsToSelector:@selector(request)]) {

[_delegaterequest];

}

...

@end

Adapter:

[objc]view plaincopy

@interfaceAdapter

{

Target*_target;

Adaptee*_adaptee;

}

@end

@implementationAdapter() 

...

// 设置代理

_target.delegate=self;

// 实现代理方法

-(void)request

{

[_adapteespecificRequest];

}

...

@end

显然,iOS中的委托(Delegate)属于对象适配器。

3、使用适配器模式的情形

①、现有类的接口与需求不匹配;

②、想要复用一个类,该类能够同其他可能带有不兼容接口的类协作;

③、需要适配一个类的几个不同子类,可是让每个子类去子类化一个类适配器又不现实,此时可以使用对象适配器(委托)来适配其父类接口

相关文章

  • Java设计模式(二)

    talk is cheap show me the code 适配器模式 类适配器模式 接口适配器模式 对象适配器...

  • 适配器模式

    目录 1、什么是适配器模式? 2、适配器模式结构? 3、如何实现适配器模式? 4、适配器模式的特点? 5、适配器模...

  • 设计模式之适配器模式

    适配器模式: 类适配器模式、对象适配器模式、接口适配器模式 1.类适配器模式:新的接口出现了,但是和老的接口不兼容...

  • 学习iOS设计模式第一章 适配器(Adapter)

    今天学习了iOS设计模式中的适配器模式,适配器有两种模式对象适配器模式-- 在这种适配器模式中,适配器容纳一个它包...

  • 第4章 结构型模式-适配器模式

    一、适配器模式简介 二、适配器模式的优点 三、适配器模式的实例

  • 设计模式(Design Patterns)适配器模式(Adapt

    适配器模式主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式。 类的适配器模式 场景:将一个类转换成...

  • 适配器模式

    适配器模式主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式。适配器模式将某个类的接口转换成客户端期...

  • 适配器模式

    先直观感受下什么叫适配器 适配器模式有类的适配器模式和对象的适配器模式两种不同的形式。 类适配器模式 对象适配器模...

  • 适配器模式

    适配器模式 一、适配器模式定义 适配器模式的定义是,Convert the interface of a clas...

  • 设计模式:结构型

    享元模式 (Pools,Message) 代理模式 适配器模式 :类适配器和对象适配器 装饰者模式 外观模式 桥接...

网友评论

      本文标题:适配器模式

      本文链接:https://www.haomeiwen.com/subject/sunzixtx.html