[OOD] 适配器模式

背景

世界上电源插头标准很多, 这里只说国标和英标:
中国标准:



英国标准:



各地插头标准不同带来的另一个问题是各地的标准插座主要针对当地插头设计。 常在世界各地跑的朋友都知道一定要配个转接头, 比如这个:



这个转换头名称是World Travel Adapter, 所起的作用就是适配。(严格来说,上面的转接头还应用了工作方法。)
*另一种形式是由插座提供适配,作用是一样的。


在软件领域里,我们也常常需要对接两种不同的接口。在设计上有两种模式可以参考。下面以文件操作适配到数据库操作的适配器为例。
1. 多重继承



这样在Adapter里CreateDB()的处理就是调用FileAPI::Open();


2. 组合模式

这时Adapter::CreateDB()实现就是adaptee_->Open();


讨论

适配器模式常常与桥接模式相比较,两者最大的不同在于解决的问题不同。适配器用于对接两个不同的接口,而桥接则主要为了隔离变化。从应用上来说,一个是被动的,一个是主动的。 所谓被动的,就是当前的接口的差异是无法轻易改变的,必须引入一个中间层来解决。而中间层的引入往往带有性能、以及不必要的数据拷贝等开销,详细参考关于层的反模式讨论
如果接口是可控,就要尽量避免接口不一致的情形。而不是等待使用Adapter来处理。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章