首页 > 代码库 > iOS常用设计模式——适配器Adapter

iOS常用设计模式——适配器Adapter

1.什么是适配器设计模式(Adapter)   (What)

适配器设计模式是一种结构型设计模式, 它的作用是把一个类的接口转换成客户希望的另外一个接口,从而使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

适配器设计模式有两种实现方式:1.)通过继承来实现两个接口,叫类适配器; 2.)通过引用来避免对象适配器继承被适配对象,叫对象适配器。


图1: 类适配器的UML

在类适配器中,Adapter与Adaptee之间的关系是继承,我们通过继承来实现对Adaptee中+ specificReque()方法的重写。


图2:对象适配器UML图



在对象适配器中, Adapter提供了一个对Adaptee的引用,通过这个引用来调用Adaptee中的+ specificReque()方法。

在iOS中, 常用的Delegate模式就属于对象适配器,以UItableViewDelegate的UML图为例:



图3:UITableViewUML


UITableView(对象适配器中的Client角色)处理选中行事件时,消息会传递给UITableViewDelegate(对象适配器中Target角色),然后调用MyViewController(对象适配器中Adapter角色)里面的- (void)tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath方法来进行处理,在MyViewController的这个方法中,我们会调用其他对象(比如说我们可能会调用详情DetailViewController对象来跳转到详情页面)来处理该消息

 

2. 什么时候使用适配器设计模式(When)

当程序员希望复用一些现存的类,但是接口又与复用环境要求不一致的情况”,在遗留代码复用、类库迁移等方面非常有用。

 

适配器模式有对象适配器和类适配器两种形式的实现结构,但是类适配器采用“多继承”的实现方式,带来了不良的高耦合,所以一般不推荐使用,另外,OC中也不支持多重继承。对象适配器采用“对象组合”的方式,更符合松耦合规范。

 

3.如何在项目中使用适配器设计模式(How)

1.) 创建一个命令行程序,一个继承自NSObject的Adaptee类,该类中有一个方法-(void)doSomething,我们假定客户端为main函数,main函数不能直接调用该方法,这是我们需要创建一个Adapter类,并定义一个Target协议,协议中定义一个接口-(void)usePublicInterface;

 

 

2.) 让Adapter继承Target协议,并与Adaptee关联起来,然后实现协议中定义的接口,在协议中调用Adaptee类中的方法。

 

3.)在客户端通过Adapter调用usePublicInterface方法就能实现对Adaptee中-(void)doSomething方法的调用。

 

 

实际上,只要实现过UITableView的朋友,都在有意无意的使用适配器设计模式,具体在前文中已经详细的叙述了。


********************************************************************************************************************************************************

——————presented by 罗大柚子

 






 

iOS常用设计模式——适配器Adapter