设计模式 之 适配器模式
前言:之前关于设计模式中的创建型模式已经全部整理完毕,下面要开始整理结构型模式相关内容,希望各位不要错过。
说明:适配器模式用来衔接两个独立不相关的接口。比如电脑的USB接口,SD卡需要读卡器(适配器)才可以接入USB。
场景
现有如下两个接口
接口Old
public interface IDemoOld { String getOld();}
接口New
public interface IDemoNew { String getNew();}
但是由于某种原因,需要实现 IDemoNew ,但是还想使用 IDemoOld 具体实现的内容,又不想重构代码,这时候可以定义一个适配器类,继承想要使用的类,实现想要使用的接口
代码
先创建类 DemoOld 实现 IDemoOld 接口
public class DemoOld implements IDemoOld{ @Override public String getOld(){ return "适配了DemoOld.getOld()方法"; }}
创建适配器 继承 DemoOld (继承想要使用的类
)实现 IDemoNew (实现想要使用的接口
)(第一种写法)
public class DemoNewAdapter extends DemoOld implements IDemoNew{ @Override public String getNew(){ return getOld(); }}
当然,适配器也可以如下写法(第二种写法)
public class DemoNewAdapter2 extends DemoOld implements IDemoNew{ private DemoOld demoOld; public DemoNewAdapter2(DemoOld demoOld){ this.demoOld = demoOld; } @Override public String getNew(){ return demoOld.getOld(); }}
测试
public class TestMe { public static void main(String[] args){ //第一种用法 IDemoNew demoNew = new DemoNewAdapter(); System.out.println(demoNew.getNew()); //第二种用法 demoNew = new DemoNewAdapter2(new DemoOld()); System.out.println(demoNew.getNew()); }}
输出如下:
适配了DemoOld.getOld()方法
优点
- 想要使用某个类的方法,但是不想使用该类的接口,那么就可以通过使用适配器来实现该需求。
- 易于扩展。
缺点
缺点就很明显了
- 过度使用适配器,让系统更加的混乱,让程序的可读性变差,比如上面的案例中,命名实现了接口demoNew,却最终实际是实现了demoOld的方法。
总结
核心思想就在于适配器DemoNewAdapter
的实现方式。当出现两个接口都想使用的时候,可以通过适配器来调解。
一般用在项目后期扩展或者修改的时候,是一种补偿模式。相信不会有人在项目开始时就使用的。
码云
博客
欢迎关注我的个人微信订阅号:(据说这个头像程序猿专用)