适配器模式:
将一个类的接口,转化成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。
适配器模式的结构:
适配器模式一般有三个部分:目标类/接口、被适配的对象、适配器类。
- 目标类/接口:我们想要使用的接口。
- 被适配的对象:已经存在的对象。这个对象和目标接口不兼容,但我们想能够想调用目标接口那样调用这个对象。
- 适配器类:实现该类,来让原本接口不相容的类可以兼容。它要继承/实现目标类/接口,并且应该持有一个被适配对象的句柄。
示例代码:
目标接口:
public interface Target { public void request();}
被适配的对象:
public class Adaptee { public void specificRequest(){ //业务代码 }}
适配器类:
public class Adapter implements Target{ //持有需要被适配的接口对象 private Adaptee adaptee; //构造器 public Adapter(Adaptee adaptee){ this.adaptee = adaptee; } //实现接口方法,它调用被适配对象的方法 public void request() { adaptee.specificRequest(); } }
像上面这样,Adaptee类就可以适配成Target接口,在需要Target接口的地方可以使用Adater(被适配的Adaptee)。
适配器可以有类适配器和对象适配器两种实现。但Java无法实现类适配器因为类适配器需要多继承。
- 当需要使用一个现有的类而其接口不符合你的需要时,就使用适配器。
- 适配器将一个对象包装起来以改变其接口;装饰器将一个对象包装起来以增加新的行为和责任;而外观将一群对象“包装”起来以简化其接口。