在我们的日常生活中购买笔记本电脑通常会赠送给我们一个电源适配器,通过这个适配器即使我们的电脑没有提供可以适配插座的插头也可以充电。在实际的开发中我们有时也会遇到同样的问题,这时我们就可以使用适配器模式。所谓适配器模式,就是把一个接口转化成用户所希望的接口,使用适配器模式可以让那些接口不兼容的类在一起工作。
适配器模式有两种类型:一种叫类的适配器模式、一种叫对象的适配器模式。首先我们来介绍什么是类的适配器模式,不多说了直接上代码!
首先定义一个目标的接口,也就是客户希望的使用的接口。
public interface Target { public void targetMethod1(); public void targetMethod2(); }
在这个接口中有两个目标方法分别是targetMethod1和targetMethod2。接下来是我们已经有的一个实现类:
public class Adaptee { public void targetMethod2(){ System.out.println("Adaptee的实现"); } }
在这个实现类里面只实现了一个targetMethod2方法,所以这个时候我们需要一个适配器。
public class Adapter extends Adaptee implements Target { @Override public void targetMethod1() { System.out.println("Adapter的实现"); } }
客户端调用:
public static void main(String[] args) { Target target = new Adapter(); target.targetMethod1(); target.targetMethod2(); } 运行结果: Adapter的实现 Adaptee的实现
通过代码可以看出适配器类是通过继承关系连接到了被适配对象。下面要介绍的对象的适配器模式使用的是组合委派的方式连接到被适配对象。其中目标接口和被适配对象不变。修改适配器类的代码:
public class Adapter implements Target { private Adaptee apaptee; public Adapter(Adaptee apaptee){ this.apaptee = apaptee; } @Override public void targetMethod1() { System.out.println("Adapter的实现"); } @Override public void targetMethod2() { this.apaptee.targetMethod2(); } }
对于类适配器模式和对象适配器模式建议使用对象适配器模式,多用组合少用继承,当然也要根据具体的情况在具体的分析。