终于来到了这一天,最后一篇设计模式啦,虽然是最后一篇,但设计模式的运用永无止境!
据说每个人生下来都只是一半,而这个世界上至少会存在那么一个人,它与你的灵魂完全契合完全互补,就像散落在各处的钥匙,总能找到一扇门可以打开… …没错就是我们今天要讲的适配器模式啦!
什么是适配器模式,运用在什么场景,有什么优缺点?三大种类设计模式中,结构型模式、创建型模式、行为型模式它属于哪一类?
适配器模式是作为两个不兼容接口之间的桥梁,这种设计模式属于结构型模式,这类模式更关注类和对象之间的结合。
当你需要将一个类的接口转换成客户需要的另一个接口时,你就需要使用到适配器模式,它可以将原本不同接口不兼容,不可以一起工作的类一起运转。生活中也有很多 常见的例子,比如说读卡器,电脑不支持直接连接内存条(手机或者mp3等插入的小内存条呀~),将内存条插入读卡器中,再将读卡器插入电脑就可以进行内存条的读写了;又或者各种播放格式的转换,avi转mp4等等;当你在国内买了个电器,去到美国使用,插电的时候就需要用到这个模式的思想,第一个是说美国和中国的家用电压不同,美国插座时110V的,中国的是220V的,第二个是说插头的类型不同,国内和美国的插座并不是一样的。
回到适配器模式,它的优点第一个是说让两个没有关联(或者不兼容)的类一起运行,实现上也没有实现耦合,比较灵活。但也有不好的地方,如果过多的使用适配器也会让系统非常乱,不易进行维护和整体的控制,试想着桌面上有一堆转换的插头,你看都看眼晕了。
需要注意的是,适配器模式不是在刚开始设计系统的时候运用的,而是解决正在运行项目的问题时才用到的。如果可以不使用适配器,尽量不使用,可以选择对系统进行重构。
话不多说,咱们直接开干!
类图:
具体代码实现:
// 电压110v
public interface VoltageTarget {
/**
* 需要110v电压
*/
public void accommodate110V();
}
// 电压220v
public class VoltageAdaptee {
/**
* 需要220v电压
*/
public void accommodate220V() {
System.out.println("VoltageAdaptee accommodate220V");
}
}
// extends VoltageAdaptee 是因为本质是为220v进行服务
// implements VoltageTarget 是因为要使用110v 就需要完成对应110v的接口
public class VoltageAdapter extends VoltageAdaptee implements VoltageTarget {
// VoltageTarget需要的是accommodate110V 但是VoltageAdaptee没有
// 所以其实是在accommodate110V调用了VoltageAdaptee的220v方法
// 包装了一层(比较简单的例子,正常220v转110v肯定还有其他的逻辑)
@Override
public void accommodate110V() {
this.accommodate220V();
}
}
public class Client {
public static void main(String[] args) {
VoltageTarget voltageAdapter = new VoltageAdapter();
voltageAdapter.accommodate110V();
}
}
/*
VoltageAdaptee accommodate220V
*/
好啦,设计模式就讲到这里了,咱们要开新章节啦!同时也希望本篇文章对你在系统编写,架构设计时有一点点启发和帮助作用。
愿每个人都能带着怀疑的态度去阅读文章并探究其中原理。
道阻且长,往事作序,来日为章。
期待我们下一次相遇!