1、问题背景
Adapter模式解决的问题在生活中经常会遇到:比如我们有一个Team为外界提供S类服务,但是我们Team里面没有能够完成此项任务的member,然后我们得知有A可以完成这项服务(这项任务提供的服务重新取了个名字叫S’,并且他不对外公布他的具体实现)。为了保证我们对外的服务类别的一致性(提供S服务),我们有以下两种方式解决这个问题:
1)把A君直接招安到我们Team为我们工作,提供S服务的时候让A君去办就是了;
2)A君可能在别的地方有工作,并且不准备接受我们的招安,于是我们Team可以想这样一种方式解决问题:我们安排B君去完成这项任务,并做好工作(Money)让B君工作的时候可以向A君请教,因此B君就是一个复合体(提供S服务,但是是A君的继承弟子)。
实际上在软件系统设计和开发中,这种问题也会经常遇到:我们为了完成某项工作购买了一个第三方的库来加快开发。这就带来了一个问题:我们在应用程序中已经设计好了接口,与这个第三方提供的接口不一致,为了使得这些接口不兼容的类(不能在一起工作)可以在一起工作了,Adapter模式提供了将一个类(第三方库)的接口转化为客户(购买使用者)希望的接口。
在上面生活中问题的解决方式也就正好对应了Adapter模式的两种类别:类模式和对象模式。
2、模式示意图