我们在软件开发后期或维护期间有时会碰到这种情况:我们想使用的一个模块功能能满足要求,但这个模块对外的接口与客户端要求的接口不兼容,我们又没有足够的时间来改造这个模块。也可能在设计之初,我们用的模块是属于第三方组件,它对外的接口也可能与客户端要求的接口不兼容,而我们显然是改不了此模块的。对于这种双方都不太容易修改的情况,我们可以使用适配器模式来解决。如果不是很必要,我们可以不使用适配器模式,而是直接对系统进行重构。
适配器模式的结构图如下:
那么适配器对象是怎么来将源接口转换成目标接口的呢? 其实就是先实现目标接口,然后在相应方法的内部调用源接口而已。就像一个翻译官一样,让我们来看一个翻译的例子来理解: