1.适配器模式用来做什么?
适配器模式就是为了解决当前客户需要某个格式的接口,而现有系统中并没有可以直接提供的接口,就例如美国的电器拿到中国来是不能直接使用的,需要使用电源适配器,再比如内存卡是不能直接插在电脑上读取的,而是需要通过一个读卡器连接电脑和内存卡,这就是适配器的存在模式。
适配器就是为了解决现有接口和需求接口不匹配的模式,在现有接口中做一层适配,使得满足需求,对于现有代码可以直接复用或者比较少修改即可使用。
图1 适配器的作用
2.怎么实现适配器模式?
适配器的实现方式有两种方式:类适配器、对象适配器
类适配器是通过继承的方式,继承现有的类,然后实现需要的新的接口,类图如下:
图2 通过继承的方式实现类适配器
这种方式的代码实现如下:
public class NowClass { public void powerA () { // do powerA } public void powerB () { // do powerB } } public interface WantClass { public void doublePowerA (); } public class Adapter extends NowClass implements WantClass{ public void doublePowerA() { powerA(); powerA(); } }
通过这种方式显示了不改动原有代码的情况下,满足了新的系统需求接口。
对象适配器是通过组合的方式实现适配,适配器持有原有对象的引用,通过用调用对象的方法来实现适配;具体类图如下:
图3 通过组合的方式实现适配器模式
具体的代码实现如下:
public class NowClass { public void powerA () { // do powerA } public void powerB () { // do powerB } } public interface WantClass { public void doublePowerA (); } public class Adapter implements WantClass{ private NowClass nowClass; public Adapter (NowClass nowClass) { this.nowClass = nowClass; } public void doublePowerA() { nowClass.powerA(); nowClass.powerA(); } }
这就是适配器的两种方式。
3. 适配器模式定义
将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。
4. 适配器模式使用场景(引自菜鸟教程:http://www.runoob.com/design-pattern/adapter-pattern.html)
1、系统需要使用现有的类,而此类的接口不符合系统的需要。
2、想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作,这些源类不一定有一致的接口。
3、通过接口转换,将一个类插入另一个类系中。(比如老虎和飞禽,现在多了一个飞虎,在不增加实体的需求下,增加一个适配器,在里面包容一个虎对象,实现飞的接口。)
关于适配器模式文章推荐:
设计模式(二) 三种适配器模式 总结和使用场景 https://blog.csdn.net/zxt0601/article/details/52848004
适配器模式 | 菜鸟教程 http://www.runoob.com/design-pattern/adapter-pattern.html
Java设计模式之《适配器模式》及应用场景 https://www.cnblogs.com/V1haoge/p/6479118.html