适配器模式是一种结构型设计模式。适配器模式的思想是:
把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。
下面是实例代码:
首先是需要适配的源
/**
* 需要适配的源
*/
public class Adaptee {
public void method2(){
System.out.println("method2");
}
}
目标接口:
/**
* 目标接口
*/
public interface Target {
void method1();
}
目标接口的实现类:
public class TargetImpl implements Target {
@Override
public void method1() {
System.out.println("mehtod1");
}
}
然后是适配器:
public class Adapter extends Adaptee implements Target {
private Target target;
Adapter(){
this.target = new TargetImpl();
}
@Override
public void method1() {
this.target.method1();
}
}
是匹配器测试代码:
public class AdapterTest {
public static void main(String[] args) {
// 假设没有适配器 TargetImpl 和 Adaptee 是毫无关联的两个类,他们的方法是不能使用同一个对象来调用的
Adaptee adaptee = new Adaptee();
adaptee.method2(); // adaptee只能调用menthod2
// 但是有了适配器,argetImpl 和 Adaptee 就能产生关联,他们的方法都能用同一个类的对象调用
Adapter adapter = new Adapter();
// 适配器中能调用它连接的两个对象的所有方法
adapter.method1();
adapter.method2();
}
}
从上面的代码看出:
如果想让两个毫无关联的类产生联系,那么我们就要使用适配器模式,
很多的情况下,我们的源也可以是实现接口的某一个类,适配器是仅仅实现两个接口的类(因为java对类是单继承的,对接口则是多实现的),这样的话,我们的适配器不仅仅使两个类产生关联,多个类也能使用适配器产生关联。
而且,我们也不建议区创建对象,结合工厂模式,我们能用工厂去完成适配器的创建,然后我们拿到适配器去调用关联的类的公共方法。
适配器模式的优点:
开闭原则,适配器扩展了源和适配对象,但是又没有修改原来的源和目标对象。
单一职责,这不做过多的说明。