适配器模式 为什么要自定义适配器
无论在生活的种种情境或是程序框架的底层代码实现中,适配器模式的运用都十分广泛,是结构型模式中常用的一种,掌握其要点显得尤为重要。
适配器模式(Adapter)的定义就是将一个类的接口转换成客户所期望的另一种接口,这样原本因接口不兼容而无法协同工作的类就能协同工作了。
在日常生活中,经常会有两个对象因接口不匹配而无法协同工作的情况出现。这时候,往往需要一个“中间人”来进行协调和转换。
例如,美版和港版电脑的电源插头与国行标准不同,这时我们需要一个电源适配器或者转换插头来解决这一问题。
适配器模式主要包含以下几个角色:
首先是目标接口,即当前系统业务所需的接口,这可以是抽象类或接口。
接着是适配者,即现存组件库中待被访问和适配的组件接口。
适配器则是一个转换器,它通过继承或引用适配者的对象,将适配者的接口转换成目标接口,使得客户能够以目标接口的格式来访问适配者。
当系统需要使用某些现有类的功能,但这些类的接口并不符合系统的要求时,适配器模式便可以发挥作用,使得这些功能得到更好的复用。
对于客户端来说,所有的调用都通过同一接口进行,因此是透明的。
一个适配器可以适配多个适配者类及其子类到目标接口。我们也可以为不同的目标接口实现不同的适配器。
过度使用适配器可能会使系统变得混乱,不易于整体把握。如果依赖的外部系统在接口设计上存在缺陷,比如包含大量静态方法,这可能会影响到我们自身代码的可测试性。
为了隔离设计上的缺陷,我们可以对外部系统提供的接口进行二次封装,抽象出更好的接口设计。这时候,适配器模式便能派上用场。
当某个功能的实现依赖于多个外部系统时,通过适配器模式将它们的接口统一为某个特定的接口定义,我们便能利用多态的特性来复用代码逻辑。
除了用于接口的适配外,适配器模式还可以用于不同格式的数据之间的转换和适配。比如将不同格式的数据统一为某种常用的格式以便于存储和使用。