Adapter
),它所包装的对象就是适配者(Adaptee
),即被适配的类。适配器模式(
Adapter Pattern
) :将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper
)。适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。适配器模式是一种结构型模式。
适配器模式包含如下角色:
Target
:目标抽象类Adapter
:适配器类Adaptee
:适配者类Client
:客户类首先,是目标角色接口和具体目标实现类:
/**
* Target 目标角色类.
*
* @author blinkfox on 2018-12-11.
*/
public interface Target {
/**
* 目标角色自己的方法.
*/
void request();
}
/**
* 具体的目标角色实现类.
*
* @author blinkfox on 2018-12-11.
*/
public class ConcreteTarget implements Target {
/**
* 目标角色自己的方法.
*/
@Override
public void request() {
System.out.println("hello, I'm concrete target method.");
}
}
其次,是适配者类:
/**
* 适配者类.
*
* @author blinkfox on 2018-12-11.
*/
public class Adaptee {
/**
* 这是原有的业务逻辑方法.
*/
public void doSomething() {
System.out.println("Hello, I'm Adaptee method.");
}
}
然后,是适配器角色类:
/**
* 适配器类.
*
* @author blinkfox on 2018-12-11.
*/
public class Adapter extends Adaptee implements Target {
/**
* 适配了目标角色自己的方法.
*/
@Override
public void request() {
super.doSomething();
System.out.println("适配器适配了目标角色方法.");
}
}
最后,是客户端场景类:
/**
* 客户端场景类.
*
* @author blinkfox on 2018-12-11.
*/
public class Client {
/**
* main方法.
*
* @param args 数组参数
*/
public static void main(String[] args) {
// 原有业务逻辑.
Target target = new ConcreteTarget();
target.request();
// 增加了适配器角色后的业务逻辑.
Target adaptTarget = new Adapter();
adaptTarget.request();
}
}
在以下情况下可以使用适配器模式:
如果一定要置换掉适配者类的一个或多个方法,就只好先做一个适配者类的子类,将适配者类的方法置换掉,然后再把适配者类的子类当做真正的适配者进行适配,实现过程较为复杂。
Sun公司在1996年公开了Java语言的数据库连接工具JDBC,JDBC使得Java语言程序能够与数据库连接,并使用SQL语言来查询和操作数据。JDBC给出一个客户端通用的抽象接口,每一个具体数据库引擎(如SQL Server、Oracle、MySQL等)的JDBC驱动软件都是一个介于JDBC接口和数据库引擎接口之间的适配器软件。抽象的JDBC接口和各个数据库引擎API之间都需要相应的适配器软件,这就是为各个不同数据库引擎准备的驱动程序。
参考自:适配器模式