适配器模式
结构型模式涉及到如何组合类和对象以获得更大的结构,适配器模式使结构型模式中的一种,它的目的是要使得一个接口与其他接口兼容,从而给出了多个不同接口的统一抽象,我们在JAVA 的Swing模块中有很多应用了适配器模式的示例。适配器模式中有两种方式,分别是类的适配器模式(采用继承实现)和对象适配器(采用对象组合方式实现)
定义
将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
使用场景
1.当你想使用一个已经存在的类,而它的接口不符合你的需求。
2.当你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。
3.当你想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口。
结构
类适配器结构图
对象适配器结构图
实现
类适配器的实现(通过继承实现)
public class Adaptee {
public void requestB(){
System.out.println("this is requestB");
}
}
public interface Target {
void requestA();
}
public class Adapter extends Adaptee implements Target{
public void requestA() {
System.out.println("this is requestA");
}
}
对象适配器的实现(通过对象组合)
public class Adapter implements Target{
private Adaptee adaptee;
public Adapter(Adaptee adaptee){
this.adaptee = adaptee;
}
public void requestA() {
System.out.println("this is requestA");
}
public void requestB() {
adaptee.requestB();;
}
}
适配器模式虽然给我们提供了更好的复用性以及扩展性,但是物极必反,过多的使用适配器,会让系统非常零乱,不易整体进行把握。比如,明明看到调用的是A接口,其实内部被适配成了B接口的实现,一个系统如果太多出现这种情况,无异于一场灾难。因此如果不是很有必要,可以不使用适配器,而是直接对系统进行重构。