设计模式之适配器模式
使得原本由于接⼝不兼容⽽不能⼀起⼯作、不能统⼀管理的那些类可以⼀起⼯作、可以进⾏统⼀管理。
解决接⼝不兼容⽽不能⼀起⼯作问题,看下⾯⼀个⾮常经典的案例在中国,⺠⽤电都是220v交流电,但是⼿机锂电池⽤的都是5v直流电。因此,我们给⼿机充电时就需要使⽤电源适配器来进⾏转换。使⽤代码还原这个⽣活场景。
创建AC220类,表示220v交流电:
public class AC220 { public int outputAC220V() { int output = 220; System.out.println("输出交流电" + output + "V"); return output; } }
创建DC5接⼝,表示5V直流电:
public interface DC5 { int outputDC5V(); }
创建电源适配器类 PowerAdapter
public class PowerAdapter implements DC5 { private AC220 ac220; public PowerAdapter(AC220 ac220) { this.ac220 = ac220; } public int outputDC5V() { int adapterInput = ac220.outputAC220V(); // 变压器... int adapterOutput = adapterInput/44; System.out.println("使⽤ PowerAdapter 输⼊AC:" + adapterInput + "V输出DC:" + adapterOutput + "V"); return adapterOutput; } }
客户端测试代码
public class AdapterTest { public static void main(String[] args) { DC5 dc5 = new PowerAdapter(new AC220()); dc5.outputDC5V(); } }
在上⾯的案例中,通过增加电源适配器类PowerAdapter实现了⼆者的兼容
使用场景
适配器模式:让我们先模拟一下适配器模式的真实使用场景:一家互联网金融公司A,开发了一套股票交易系统,其包含客户端和服务器,用户登录接口是由客户端和服务器端自主协商的,目前这套系统已投入生产并稳定运行。某天,公司A接到一家证券公司的项目,需要把这套系统部署在这个证券公司中。此外,此证券公司还同时使用了公司B的客户端,因此,公司B的客户端需与公司A的服务器端相接。但公司B客户端的用户信息与公司a系统定义的类型不符,这时,该怎么办呢?
有三种解决方案。一,修改服务器的接口,以适应其他客户端的用户类型。二,增加接口,以处理另一个客户端的用户类型。三,在服务端执行用户处理接口前,调用一个方法,把其他客户端的用户类型转换成原本的用户类型。
方案一的缺点是他会修改到已经在生产环境上稳定运行的接口,影响系统的稳定性,且需要进行回归测试。方案二的缺点是,新增加的接口的业务逻辑会与原来的接口有所重复。而方案三即是适配器模式,它不仅有效地解决了问题,同时避免了前两种方案的弊端。
什么时候需要用适配器模式?只要记住一点。当你有动机修改一个已经投入生产的接口,这时候就可以考虑试用适配器模式。适配器模式是用于解决接口不兼容问题有效方法。
有三种解决方案。一,修改服务器的接口,以适应其他客户端的用户类型。二,增加接口,以处理另一个客户端的用户类型。三,在服务端执行用户处理接口前,调用一个方法,把其他客户端的用户类型转换成原本的用户类型。
方案一的缺点是他会修改到已经在生产环境上稳定运行的接口,影响系统的稳定性,且需要进行回归测试。方案二的缺点是,新增加的接口的业务逻辑会与原来的接口有所重复。而方案三即是适配器模式,它不仅有效地解决了问题,同时避免了前两种方案的弊端。
什么时候需要用适配器模式?只要记住一点。当你有动机修改一个已经投入生产的接口,这时候就可以考虑试用适配器模式。适配器模式是用于解决接口不兼容问题有效方法。
浙公网安备 33010602011771号