ZPY博客

设计模式总结之适配器模式(Adapter Pattern)

适配器,相信大家都不陌生,最简单的例子就是插头的转接头,就是一个经典的适配器。我国的插头在欧洲用不了,必须加上一个转接头才能用,而这个转接头就是适配器。

在什么情况下我们需要使用适配器模式呢?一个典型的场景就是调用的接口变了,这时用适配器模式就可以实现不用修改之前的代码,加一个适配器,让原来的代码可以调用新的接口。

一个实际例子:旧版本的java在对集合遍历时用的是枚举器Enumeration,而新版本的java用的是迭代器Iterator,枚举器里面有hasMoreElements()和nexElement()方法,而迭代器里则是hasNext()和next()方法。如果现在有代码是用老的枚举器来遍历集合的,但我们现在想用新的迭代器来实现,又不想修改之前的代码,我们该怎么做?对了,用适配器模式就行了。新建一个适配器,对外还是暴露枚举器里面的hasMoreElements()和nexElement()方法,但方法里面则调用迭代器里的hasNext()和next()方法。那么如何才能调用Iterator里的方法呢?答案就是适配器里持有一个Iterator对象,在实例化时传入Iterator对象即可。

有很多人会把装饰模式和适配器模式搞混,装饰模式之前我已经总结过了,地址是

这两个模式确实比较容易混淆,共同点都是新建一个类来充当第三方角色,最主要的一个不同点就是装饰模式不改变原来的接口,而适配器模式要改变接口。另外一个不同点是装饰模式经过装饰后还是对象它自己,也就是装饰类和被装饰者需要继承于同一个父类,适配器则没有这个特点。