转自独立blog《Adrop的自留地

----Head First Pattern之适配器模式

很多人都有移动硬盘,它比U盘容量大的多,体积也小,携带方便,用来拷资料、备份都很不错。并且硬盘价格越来越便宜,120G的移动硬盘现在才300多。

 

其实移动硬盘里面就是一块普通的笔记本硬盘,还有一个IDE口(或SATA口,看硬盘的类型了,现在一般都是SATA口即串口,IDE口就是并口)和USB口的转换卡,用USB线和电脑上的USB口连接起来就行了。

 

我手头有一个40G的IDE口笔记本硬盘,想在PC电脑上用,但又不想把电脑拆开插主板的IDE线上。看到电脑上还有很多空闲的USB口,就想能不能让笔记本硬盘的IDE口连到电脑的USB口?直接连肯定不行,接口不匹配啊。就去电子市场逛了一个下午,发现有一种转接卡,一头可以插IDE口,一头是USB口,能连USB线,USB线就可以连电脑的USB口了。我买了转接卡回到家,把转接卡一头插在笔记本硬盘的IDE口上,另一头连上USB线,再把USB线连到电脑的USB口上。大功告成,现在我的笔记本硬盘就变成移动硬盘了。转接卡就是连接IDE口和USB口的适配器。这就是适配器模式。

下面看适配器的UML类图:

 

这个类图有点问题,其实Adaptee应该是一个接口,还有个实现这个接口的ConcreteAdaptee,而Adapter是目标接口,ConcreteAdapter必须实现Adapter,持有一个Adaptee。移动硬盘和适配器模式对应关系如下:

Adapter: USB接口

Adaptee:笔记本硬盘的IDE接口

ConcreteAdapter:转接卡

 

总而言之,适配器模式就是把一个接口Adaptee,适配成目标接口Adapter。

 

某些时候适配器和装饰模式有点相同之处,但是两者本质是不一样的。

Adapter是把所包装的接口,转换为另一个接口。而Decorator是给所包装的接口,添加新的行为或方法。