您的位置:首页 > 其它

设计模式学习--------5.适配器模式学习

2014-05-18 17:19 211 查看
转载:/article/1602440.html

场景:

系统升级后,定义了一套新的接口逻辑,但是希望新的接口能兼容旧的功能,比如有些用户没有升级

新版本,还是使用旧的接口和功能.

类比原来的插头和插孔是两箱的,现在插孔换成或者叫定义成了三箱,这样三箱的插头才可以使用,

原来两箱的需要用一个转换器或者叫适配器将两箱转成三箱,这样就可以继续使用.

定义:

将一个类的接口转换成客户希望的另外一个接口,适配器模式使得原本由于接口不兼容而不能一起工作的那些类可

以一起工作.

角色:

Target:新的业务接口

package com.kris.study;

public interface Target {

public void request();

}

Adaptee:已经存在的功能,通常能满足客户端要求,但是与新接口的方法定义不一致,需要被适配

package com.kris.study;

public class Adaptee {

public void oldRequest(String s){

System.out.println(s);

}

}

Adapter: 适配器,把Adaptee适配成为Client需要的Target.

package com.kris.study;

public class Adapter implements Target{

private Adaptee adaptee;

public Adapter(Adaptee adaptee){

this.adaptee = adaptee;

}

@Override

public void request() {

adaptee.oldRequest("old method invoke");

}

}

Client: 客户端,调用Target接口实现业务

package com.kris.study;

public class Client {

public static void main(String[] args) {

Adaptee adaptee = new Adaptee();

Adapter adapter = new Adapter(adaptee);

adapter.request();

}

}

原理分析:

适配器的本质是: 转换匹配,复用功能.

通过转换调用已有实现,从而能把已有的实现匹配成需要的接口,使之满足新的业务需要,所以转换匹配是手段,复用已有功能才是目的。

适配器实际上利用了对象组合的方式

一个适配器可以适配多个Adaptee,也就是实现新的Target接口时需要调用多个不同的模块,也可以缺省实现,简单

的转换接口的参数.复杂度取决于Target和Adaptee的相似程度.

一个适配器也可以进行双向适配,比如上面的例子同时让新的接口实现类TargetImpl去适配Adaptee接口.

优点:

更好的复用性,扩展性.

缺点:

当旧的功能与新的接口功能相似度很低时,使用适配还不如重写方便

当过多的使用适配器,会导致系统零乱,明明是调用A的接口,实际上却是通过B的接口来实现.这时应该选择重构.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: