适配器模式
定义
将一个类的接口转换为客户希望的另外一个接口。Adapter模式使得原来原来由于接口不兼容而不能一起工作的那些类可以在一起工作。
角色分析
- 目标接口
客户所期待的接口,目标可以是具体的或是抽象的类,也可以是接口 - 需要适配的类
需要适配的类或是适配者类 - 适配器
通过包装一个需要适配的对象(继承和组合),把原接口转换为目标接口
适配方式
类适配器
适配器通过继承的方式来实现适配者类的功能
/**
* 类适配器
* 需要的是5v的电压,但是使用220v电压实现
*/
public class AdapterClass extends Voltage220V implements Voltage5V {
@Override
public int support5V() {
return support220V() / 44;
}
}
idea类图
对象适配器
适配器通过组合的方式来实现适配者类的功能
/**
* 对象适配器
*/
public class AdapterObject implements Voltage5V {
private Voltage220V obj;
public AdapterObject(Voltage220V obj) {
this.obj = obj;
}
@Override
public int support5V() {
return obj.support220V() / 44;
}
}
idea类图
对象适配器和类适配器区别
对象适配器优点
- 一个对象适配器可以把多个不同的适配器适配到同一个目标
- 可以适配一个适配者的子类,由于适配器和适配者之间是关联关系,根据“里氏替代”,适配者的子类也可以通过该适配器进行适配。
类适配器的缺点
- 对于java,c#等语言不支持多重继承的语言,一次最多只能适配一个适配者类,不能同时适配多个适配者
- 在Java和c#中,类适配器模式中的目标抽象类只能是接口,使用具有一定局限性
适用场景
- 系统需要使用一些现有的类,而这些类的接口(比如方法名)不符合系统的需求,甚至没有这些类的源代码
- 想创建一个可以重复使用的类,用于于一些彼此之间没有太大联系的一些类,包括一些可能在将来一起引进的类一起工作