**关于适配器模式 **
适配器模式主要让客户端代码可以统一调用统一接口。当两个类所做的事情相同或相似,但是具有不同的接口时,就可以使用适配器模式。
比如JDBC驱动软件,每一个数据库引擎的JDBC驱动软件都是一个介于JDBC接口和数据库引擎接口之间的适配器。
如下图所示:
在GoF的设计模式中,对适配器模式讲了两种类型,类适配器模式和对象适配器模式,由于类适配器模式通过多重继承对一个接口与另一个接口进行匹配,而C#、VB.NET、JAVA等语言都不支持多重继承(C++支持),也就是一个类只有一个父类,所以本文主要讲的是对象适配器。
**适配器的实现 **
从上图中可以看出,Adaptee类并没有MethodA()方法,而客户端需要使用这个方法。为使客户端能够使用Adaptee类,提供一个中间环节,即类Adapter。将Adaptee的API与Target的API衔接起来。
1.Client: 客户端需要与实现Target接口的类进行衔接使用。
2.Target(目标): Target可以是具体的或抽象的类。
3.Adaptee(源): 包含客户端需要的方法,可是接口与客户端不兼容。
4.Adapter(适配器): Adapter实现了Target的接口,且包含Adapter类的一个私有实例adapter。当客户端执行MethodA方法时,通过adapter实例调用MethodB方法。
代码实现:
public class Client {
private Target target;
public Client(Target target) {
this.target = target;
}
public void MakeRequest() {
target.MethodA();
}
}
public interface Target {
void MethodA();
}
public class Adaptee {
public void MethodB() {
System.out.println("MethodB called");
}
}
public class Adapter implements Target {
Adaptee adaptee = new Adaptee();
public void MethodA() {
adaptee.MethodB();
}
}
参考:
「1」:Adapter Design Pattern-blackwasp
「2」:JAVA 与模式
「3」:大话设计模式