为被适配者类定义第二个子类实现(罗技耳机)
package cn.hsh.study.object.adapter; /** * @author shaohua * @date 2021/4/15 20:43 */ public class Logic extends Headset { @Override public void out() { System.out.println("罗技耳机发出声音"); } }然后到了最关键的步骤,我们来定义适配器。这里我们可以看到,我们将类适配器的继承模式改为了关联模式。
package cn.hsh.study.object.adapter; /** * @author shaohua * @date 2021/4/15 20:41 */ public class Adapter implements Computer { private Headset headset; public Adapter(Headset headset){ this.headset = headset; } public void out() { this.headset.out(); } }最后客户端调用
package cn.hsh.study.object.adapter; /** * @author shaohua * @date 2021/4/15 20:41 */ public class Client { public static void main(String[] args) { Computer computer = new Adapter(new HUAWEIHeadset()); computer.out(); computer = new Adapter(new Logic()); computer.out(); } }我们来看客户端调用, 这个时候我们就实现了一个适配器类适配多个被适配者类的方式,我们可以为多个类型的耳机进行适配。
执行结果
总结适配器模式不应该在系统的设计之初使用,而是在系统升级维护,或者对接第三方系统导致双方接口不兼容的时候才使用,使用的时候是用类适配器还是对象适配器根据具体情况而定,各有优缺点。