由于接口不兼容,需要通过“适配器”来进行协调工作。
适配器模式中总共有3种角色: 2.1目标接口 客户期待的接口。目标可以是具体的或抽象的类,也可以是接口。 2.2需要适配的类 需要适配的类或者适配者类。 2.3适配器 通过包装一个需要适配的对象,将原有的接口转换成目标接口。 具体的UML示意图如下:
下面通过一个生活中的一个实际例子来对这种模式进行一个讲解: 串行口键盘类:
public class Ps2KeyBoard { public void request(){ System.out.println("打字very快!"); } }这和我们的LapTop类并不兼容,但是我们不想要改代码呀,怎么办? 这时候就需要我们的适配器来完成这任务了!当然,在编写这个适配器之前我们需要定义一个接口,来对这个类的行为做一下规范。
public interface Target { void handleRequest(); }
实现适配器的方式有两种 方法1:继承方式
public class Adapter extends Ps2KeyBoard implements Target{ @Override public void handleRequest() { super.request(); } }
方法2:
public class Adapter2 implements Target{ private Ps2KeyBoard keyBoard; @Override public void handleRequest() { keyBoard.request(); } public Adapter2(Ps2KeyBoard keyBoard) { this.keyBoard = keyBoard; } }
LapTop类:
public class Laptop { public void test01(Target target){ target.handleRequest(); } public static void main(String[] args) { Laptop laptop=new Laptop(); Ps2KeyBoard ps2KeyBoard=new Ps2KeyBoard(); Target target=new Adapter(); laptop.test01(target);//方法1 Target target1=new Adapter2(ps2KeyBoard); laptop.test01(target1);//方法2 } }
适配器模式主要是用来解决接口的不兼容问题,具体的解决思想,就是通过创建适配器类来对无法直接调用的对象进行包装,然后通过适配器类来调用这个不兼容的对象,返回我们需要的东西。 项目链接:https://github.com/memoryexplosion/design_pattern_review/tree/master/src/java/adapter
