适配器模式的应用场景
适配器模式(Adapter Pattern)是指将一个类的接口转换成用户期望的另一个接口,使原本接口不兼容的类可以一起工作,属于结构型设计模式。
适配器模式适用于以下几种业务场景:
- 已经存在的类的方法和需求不匹配(方法结果相同或相似)的情况。
- 适配器模式不是软件初始阶段考虑的设计模式,是随着软件的发展,由于不同的产品、不同的厂家造成功能类似而接口不同的问题的解决方案,有点亡羊补牢的感觉。
在中国,民用电都是 220V 交流电,但手机锂电池使用的是 5V 直流电。因此,我们给手机充电时就需要使用电源适配器来进行转换。下面用代码来还原这个生活场景,创建 AC220 类,表示 220V 交流电:
package com.yjw.demo.pattern.adapter2;
public class AC220 {
public int outputAC220V() {
int output = 220;
System.out.println("输出交流电" + output + "V");
return output;
}
}
创建 DC5 接口,表示 5V 直流电:
package com.yjw.demo.pattern.adapter2;
public interface DC5 {
int outputDC5V();
}
创建电源适配器类 PowerAdapter:
package com.yjw.demo.pattern.adapter2;
public class PowerAdapter implements DC5 {
private AC220 ac220;
public PowerAdapter(AC220 ac220) {
this.ac220 = ac220;
}
@Override
public int outputDC5V() {
int adapterInput = ac220.outputAC220V();
// 变压器
int adapterOutput = adapterInput / 44;
System.out.println("使用 PowerAdapter 输入 AC:" + adapterInput + "V" + "输出DC:" + adapterOutput + "V");
return adapterOutput;
}
}
客户端测试代码如下:
package com.yjw.demo.pattern.adapter2;
public class ObjectAdapterTest {
public static void main(String[] args) {
DC5 dc5 = new PowerAdapter(new AC220());
dc5.outputDC5V();
}
}
在上面的案例中,通过增加电源适配器类 PowerAdapter 实现了二者的兼容。
适配器模式的优缺点
适配器模式的优点如下:
- 能提高类的透明性和复用性,现有的类会被复用但不需要改变。
- 目标类和适配器类解耦,可以提高程序的扩展性。
- 在很多业务场景中符合开闭原则。
适配器模式的缺点如下:
- 在适配器代码编写过程中需要进行全面考虑,可能会增加系统的复杂性。
- 增加了代码的阅读难度,降低了代码的可读性,过多使用适配器会使系统的代码变得凌乱。
摘录:《Spring 5 核心原理与30个类手写实战》来自文艺界的Tom老师的书籍。
作者:殷建卫 链接:https://www.yuque.com/yinjianwei/vyrvkf/wmazme 来源:殷建卫 - 架构笔记 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。