欢迎转载,共同进步。请注明出处:http://www.jianshu.com/u/e627f27f75b7
简介
正如其名,适配器,就是将本来不适用于当前接口的类包装成适用于当前接口的类。比如电源适配器,我们日常用电是220V交流电,而有很多电器不需要这么高的电压,于是电源适配器将220V的电压转换成电器需要的电压,这是电源适配器做的事,也是适配器模式要做的事。
适配器的UML图,图片来自puppet_master
示例
废话不多说,直接上代码,以电源适配为例:
//220V插座
class Socket220V{
Applicance220V socket; //220V电器
public void AddApplicance(Applicance220V applicance){
socket = applicance;
}
public void Work(){
socket.Work();
}
}
//220V电器
class Applicance220V{
public void Work(){
print("220V电器正常运行");
}
}
//电源适配器
class Adapter : Applicance220V{
ApplicanceOther applicance;
public Adapter(ApplicanceOther applicance){
this.applicance = applicance;
}
public void Work(){
//做一些适配工作
applicance.Work();
print("其它电压电器也正常运行");
}
}
在想要使用非220V电压的电器对象时,将此对象作为参数构造一个适配器,再使用这个适配器,即可完成在220V电压下使用非220V电压电器的目的。(注意适配器实际上是220V电器的子类,所以可以在适配完成后作为220V电器插入220V插座中运行)
总结
最后来总结适配器模式的优缺点:
优点:
1、可以很好地复用现有的类对象,不需要重复开发,有很好的复用性。
2、符合开放封闭原则,增加而不修改。
3、由于适配器类是适配者类的子类,因此可以在适配器类中置换一些适配者的方法,使得适配器的灵活性更强。
缺点:
1、适配器是一种补偿型的模式,如果可以提前将接口设计得统一的话,完全不需要适配器模式。(但是往往没办法考虑得这么周到)
参考文献
http://blog.csdn.net/puppet_master/article/details/51326210
文章如有错误,欢迎指正。