6) Adapter Pattern
类别:
Structural Pattern
问题:
什么是接口?
按照标准提供服务,其他想要使用该接口的要按照该标准接入服务
什么是依赖?
持有目标对象,拥有使用权(A use B)
数据线?
数据线按USB标准接入充电宝,通过lightning 提供充电服务
手机?
通过lightning标准接入数据线
客户端因种种限制只能接入目标接口
服务器因种种限制只能提供某个固定接口
方案:
示例:
Power.java
package foo; public class Power { }
PowerBank.java
package foo; public class PowerBank implements Usb { Power[] powers; @Override public Power discharge() { return null; } }
MobilePhone.java
package foo; public class MobilePhone { /** * 手机 use 数据线 */ Lightning lightning; public void charge() { Power power = lightning.discharge(); // TODO 获取电量 } }
Adapter.java
package foo; public class Adapter implements Lightning { /** * 数据线use 充电宝 */ private Usb usb; @Override public Power discharge() { return usb.discharge(); } }
Usb.java
package foo; /** * 充电宝实现了usb接口,可放电 * * @author witas * */ public interface Usb { public Power discharge(); }
Lightning.java
package foo; /** * 数据线提供了lightning接口,可以放电 * * @author witas * */ public interface Lightning { public Power discharge(); }
分析:
提供服务的是接口的实现类
消费服务的要可以接入服务
消费者接入的接口不能变(客观原因)
生产者提供的接口不能变(客观原因)
适配器实现消费者接入的固定接口,自己本身不生产,需要从生产者那里获取,转交给消费者
应用:
不足:(
优化:)