一、设计目标
软件系统中,由于应用环境的变化,常常需要将一些现存的对象放到新的环境中,但新环境要求的接口是这些现存对象不能满足的。如何即应用现存对象的良好实现,又能满足新的应用环境所要求的接口?适配器模式就是解决这个问题。
二、模式定义
将类的接口转化为客户希望的另一个接口。适配器模式使得原本接口不兼容而不能一起工作的那些类可以一起工作。
三、类图
Target:Target是我们未来所希望使用的接口;
Adaptee:是被适配者,表示的是我们以前存在的接口。
Adapter:表示适配者。
实箭头表示组合关系,空箭头表示继承关系,继承将来要用的接口,目的是为了遵循目标接口的接口规范。Adapter类继承将来要用的接口,并且组合了现在已经存在的接口,从而实现已有接口到目标接口的转换。
四、代码示例
首先,我们需要的目标接口如下,目标接口就是我们将来需要的接口。
public interface Target { void process(); }
我们现在还有已经存在的接口,也就是被适配者Adaptee。
public interface Adaptee { void processA(); void processB(); }
然后我们就构建一个适配者,通过组合和继承完成适配。如下所示
public class Adapter implements Target{ private Adaptee adaptee; public Adapter(Adaptee adaptee) { this.adaptee = adaptee; } @Override public void process() { adaptee.processA(); adaptee.processB(); } }
从上面的代码样例中,小伙伴们应该能感受到了适配器模式的主要思想了吧,巧妙的通过继承和组合来实现接口的转换。将已有的功能通过适配器转换成目标类需要的功能,仔细想想,就能感受到它的巧妙支处了。