转载

适配器模式

这次跟大家分享一下我对适配器模式的理解。

适配器模式的定义:

将一个类的接口转换成用户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的类,可以一起工作了。

举个我们日常生活中的例子:

有一部移动电源,有一部iphone一部android手机,需要充电使用普通的Usb线就可以给android手机充电,而在给iphone充电的时候必须使用适配iphone的万能转接头才能充电。

iphone和android就相当于两个不兼容的接口,转接头就相当于一个适配器,他使得iphone和android手机都能充电了。

在我们的项目中可以这样是用适配器模式:

假如我们开发一个发发动态的功能,第一版要求可以发送文字,实现如下:

public interface ISendTextPost{
public void sendTextPost();
}

public class SendTextPost implements ISendTextPost{
public void sendTextPost{
//发送文字动态
}
}

实现方式如上所述,很简单。如果第二版要求既可以发图片也可以发文字动态,实现如下:

public interface ISendPicturePost{
public void sendTextPost();
pubiic void sendPicturePost();
}

//假如发文字和图片是这样的~~
public class SendPicturePost implements ISendPicturePost{

public void sendTextPost{
//发送文字动态
}

public void sendPicturePost{
//发送图片动态
}
}

上述这样实现可以吗?答案是必须不行的,因为发送文字的方法之前已经实现了,完全没必要再去实现一次。如果重复的方法有很多呢,估计都想砸键盘了。

对于这种接口不兼容的问题,使用适配器模式可以很好的解决:

适配器模式的模型如下:

// 用户所需功能接口 target1
public interface ITarget1{
public void doTarget1();
}

//target1实现类
public class Target1Impl implements ITarget1{
public void doTarget1(){
//做A事情
}
}

// 用户所需功能接口 target2
public interface ITarget2{
public void doTarget2();
}

//target2实现类
public class Target2Imp implements ITarget2{
public void doTarget2(){
//做B事情
}
}

// 适配器
public class Adapter implements ITarget1, ITarget2{
private ITarget1 target1;
private ITarget2 target2;

public Adapter(ITarget1 target1,ITarget2 target2){
this.target1 = target1;
this.target2 = target2;
}

public void target1(){
//做A事情
target1.doTarget1();
}

public void doTarget2(){
//做B事情
target2.doTarget2();
}
}

// Client
public class Client {
public static void main(Sting[] args){
ITarget1 target1 = new Target1Impl();
ITarget2 target2 = new Target1Imp2();

Adapter adapter = new Adapter(target1,target2);
adapter.doTarget1();
adapter.doTarget2();
}
}

上面就是使用适配器的实现方式。在上述的实现方式中, target1target2 都是业务层面的接口,他们有不同的业务功能,对于客户端来说,调用 target1 接口时很正常,但是要兼容 target2 的功能的时候,就需要有一个实现了 target1 功能,并且兼容了 target2 功能的类, Adapter 就是这样的一个类,他就是一个转换器,兼容不同的接口来实现功能。

在上面的实现中,实质上是使用了 对象组合 来实现业务功能的兼容。使用 Adapter 可使得已有功能复用,加快开发效率,减少维护成本,在 Adapter 中也可以加入一些自己实现的公用方法,这样可以使得Adapter的功能更强大。

但是要注意的一点是,在一个系统中不应该过多的使用 Adapter模式 ,使用过多,会使得系统变得比较凌乱,不好把握,本来明明调的是A接口但是返回的是B结果,因此在使用适配器模式时要记住这一点。

适配器模式的最重要的一点就是,对象组合,转换匹配,复用功能。

原文  http://tedyin.me/2016/03/20/adapter-pattern/
正文到此结束
Loading...