设计模式——适配器模式
引言
网上有很多介绍设计模式系列的优秀文章,看懂不一定是真懂,能写出来,说出个1、2、3点才算是真的懂了,如果能灵活的应用到工作中才算是真的熟练。
1、模式场景
手机充电器的数据线一端是typec类型连接手机,另一端是usb类型可以连接电脑,现在我们加个usb适配器,使得数据线可以通过220V插座进行充电。
2、模式结构
-
目标抽象类 Target(对应模拟场景中的充电器) 适配器类 Adapter(对应模拟场景中usb适配器) 适配者类 Adaptee(对应模拟场景中usb数据线) 客户类 Client(对应模拟场景中手机充电行为)
3、示例代码
适配器模式有对象适配器和类适配器两种实现,本示例采用的是对象适配器方式。
3.1、目标抽象类
public abstract class Target { public void charging(){ System.out.println("插座充电"); } }
3.2、适配器类
//Usb适配器 public class UsbAdapter extends Target { private Usb usb; public UsbAdapter(Usb usb){ this.usb = usb; } @Override public void charging() { usb.usbCharging(); } }
3.3、适配者类
public class Usb { public void usbCharging(){ System.out.println("usb charging ..."); } }
3.4、客户端
public class Client { public static void main(String[] args) { Target usbAdapter = new UsbAdapter(new Usb()); usbAdapter.charging(); } }
控制台输出:
usb charging ...
4、模式优点
-
将目标类和适配者类解耦,增加一个适配器类,无需修改原代码逻辑。 增加了类的灵活性、复用性、扩展性。
5、模式缺点
-
类适配器模式的缺点是:目标抽象类只能为抽象类,不能为具体类,其使用有一定的局限性,且Java是单继承,所以一次最多只能适配一个适配者类。 对象适配器模式的缺点:要想置换适配者类的方法不容易,需要重写适配者类子类方法,再把适配者类的子类当做真正的适配者进行适配,实现过程复杂。
结束语
下一篇:
稀疏数组的应用(简单案例)