适配器模式:如何让不兼容的接口变得兼容( 二 )

public interface DualPin {public void electrify(int l, int n);}

  1. 添加被适配者接口具体实现类:TV,可以看到 TV 实现的是两相接口,所在无法直接在三项接口中使用 。
public class TV implements DualPin {@Overridepublic void electrify(int l, int n) {System.out.println("火线通电:" + l + ",零线通电:" + n);System.out.println("电视开机");}}
  1. 定义适配器类:三项接口适配器 TriplePinAdapter,实现了三项接口并且包含两项接口属性,在 electrify 方法中调用被适配设备的两插通电方法,忽略地线参数 e,以此来完成三项接口对两项接口的兼容 。
【适配器模式:如何让不兼容的接口变得兼容】这也就意味着 TriplePinAdapter 类能帮助我们将 TV 类与三项接口兼容 。
public class TriplePinAdapter implements TriplePin {private DualPin dualPin;public TriplePinAdapter(DualPin dualPin) {this.dualPin = dualPin;}@Overridepublic void electrify(int l, int n, int e) {// 调用被适配设备的两插通电方法,忽略地线参数edualPin.electrify(l, n);}}
  1. 定义客户端类
public class Client {public static void mAIn(String[] args) {DualPin dualPinDevice = new TV();TriplePin triplePinDevice = new TriplePinAdapter(dualPinDevice);triplePinDevice.electrify(1, 0, -1);}}输出结果如下:
火线通电:1,零线通电:0电视开机总结
适配器模式:如何让不兼容的接口变得兼容

文章插图
通过利用适配器模式对系统进行扩展后,我们就不必再为解决兼容性问题去暴力修改类接口了,转而通过适配器,以更为优雅、巧妙的方式将两侧“对立”的接口“整合”在一起,顺利化解双方难以调和的矛盾,最终使它们顺利接通 。




推荐阅读