文档介绍::类适配器、对象适配器
适配器模式(Adapter):将一个类的接口转换成客户希望的另外一个接口。A d a p t e r 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
适用场景:
1、已经存在的类的接口不符合我们的需求;
2、创建一个可以复用的类,使得该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作;
3、在不对每一个都进行子类化以匹配它们的接口的情况下,使用一些已经存在的子类。通用类图:
电源适配器,它是用于电流变换(整流)的设备。适配器的存在,就是为了将已存在的东西(接口)转换成适合我们的需要、能被我们所利用。在现实生活中,适配器更多的是作为一个中间层来实现这种转换作用。
在上面的通用类图中,Cient 类最终面对的是 Target 接口(或抽象类),它只能够使用符合这一目标标准的子类;而Adaptee 类则是被适配的对象(也称源角色),因为它包含specific (特殊的)操作、功能等,所以我们想要在自己的系统中使用它,将其转换成符合我们标准的类,使得 Client 类可以在透明的情况下任意选择使用 ConcreteTarget 类或是具有特殊功能的 Adatee 类。
代码实现如下:
// 已存在的、具有特殊功能、但不符合我们既有的标准接口的类
class Adaptee {
} publicvoid specificRequest() { ("被适配类具有特殊功能..."); }
// 目标接口,或称为标准接口
interface Target {
publicvoid request();
}
// 具体目标类,只提供普通功能
class ConcreteTarget implements Target {
} publicvoid request() { ("普通类具有普通功能..."); }
// 适配器类,继承了被适配类,同时实现标准接口
class Adapter extends Adaptee implements Target {
} publicvoid request() { ();//特殊调用}
// 测试类
lassClient {
} publicstaticvoid main(String[] args) { } // 使用普通功能类 Target concreteTarget = new ConcreteTarget(); (); // 使用特殊功能类,即适配类 Target adapter = new Adapter(); ();
测试结果:
普通类具有普通功能...
被适配类具有特殊功能...
上面这种实现的适配器称为类适配器,因为 Adapter 类既继承了 Adaptee (被适配类),也实现了 Target 接口(因为 Java 不支持多继承,所以这样来实现),在 Client 类中我们可以根据需要选择并创建任一种符合需求的子类,来实现具体功