适配器模式

发布 : 2018-12-06 分类 : 设计模式 浏览 :

介绍

将一个接口转换成客户希望的另一个接口, 使接口不兼容的那些类可以一起工作, 其别名为包装器(Wrapper).

结构

  • 目标抽象类: 目标抽象类定义客户所需接口, 可以是一个抽象类或接口, 也可以是具体类.
  • 适配器类: 转换器, 它通过继承Target并关联一个Adaptee对象使二者产生联系.
  • 适配者类: 适配者即被适配的角色, 一般是类
    适配器模式
Demo
目标抽象类: 即希望得到直流电
public  interface DirectCurrent {

int transform();

}
适配者类: 但是现在只有交流电
public class AlternatingCurrent {

public int output() {
System.out.println("输出交流电" + 200 + "V");
return 220;
}
}
适配器类: 继承目标抽象类并且关联适配者类, 进行转换适配, 一般使用对象适配器

对象适配器:

public class DirectCurrentAdapter implements DirectCurrent {

private AlternatingCurrent alternatingCurrent;

public DirectCurrentAdapter() {
this.alternatingCurrent = new AlternatingCurrent();
}

@Override
public int transform() {

int i = alternatingCurrent.output()/44;
System.out.println("转换直流电: " + i + "V");
return i;
}
}

类适配器:

public class DirectCurrentObjAdapter extends AlternatingCurrent implements DirectCurrent {
@Override
public int transform() {

int i = output()/44;
System.out.println("转换直流电: " + i + "V");
return i;
}
}

测试:
public class AdapterTest {

public static void main(String[] args) {

DirectCurrent directCurrentAdapter = new DirectCurrentAdapter();

int transform = directCurrentAdapter.transform();

System.out.println(transform);

}
}

输出结果:

输出交流电200V
转换直流电: 5V
5

结论

  • 目标类和适配类解耦, 易于扩展, 复用
  • 区分类适配器和对象适配器, 一般使用对象适配器

本文作者 : liuzhihang
原文链接 : https://liuzhihang.com/2018/12/06/adapter-mode.html
版权声明 : 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!

博客已萌萌哒运行(●'◡'●)ノ♥
Theme - BMW | Made With 💗 | Powered by GodBMW