六、Adapter 适配器模式 (创建型)

六、Adapter 适配器模式 (创建型)
1、意图:把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法在一起工作的两个类能够在一起工作。

2、场景:假设网络游戏的客户端程序分两部分。一部分是和服务端通讯的大厅部分,大厅部分提供的功能有道具购买、读取房间列表、创建房间以及启动游戏程序。另一部分就是游戏程序了,游戏程序和大厅程序虽然属于一个客户端,但是由不同的公司在进行开发。游戏大厅通过实现约定的接口和游戏程序进行通讯。
     一开始的设计就是,大厅程序是基于接口方式调用游戏程序启动游戏场景方法的。在大厅程序开发接近完成的时候,公司决定和另外一家游戏公司合作,因此希望把大厅程序能适用另一个游戏。而这个新游戏的遵循的是另一套接口。是不是可以避免修改原先调用方法来启动场景呢?或许你会说,既然只有一个方法修改,那么修改一下也无妨,我们假设大厅程序和游戏程序之间有100个接口,其中的大部分都有修改呢?因为游戏程序接口的修改,大厅程序可能要修改不止100个地方。这样接口的意义何在呢?
     此时可以考虑使用Adapter模式来适配这种接口的不匹配情况。

 

示例代码

5、何时采用
  -- 从代码角度来说, 如果需要调用的类所遵循的接口并不符合系统的要求或者说并不是客户所期望的,那么可以考虑使用适配器。
  -- 从应用角度来说, 如果因为产品迁移、合作模块的变动,导致双方一致的接口产生了不一致,或者是希望在两个关联不大的类型之间建立一种关系的情况下可以考虑适配器模式。

6、实现要点
  -- 适配器模式是否能成功运用的关键在于代码本身是否是基于接口编程的,如果不是的话,那么适配器无能为力。
  -- 适配器模式的实现很简单,基本的思想就是适配器一定是遵循目标接口的。
  -- 适配器模式的变化比较多,可以通过继承和组合方式进行适配,适配器可以是一组适配器产品,适配器也可以

是抽象类型。
  -- 适配器模式和Facade的区别是,前者是遵循接口的,后者可以是不遵循接口的,比较灵活。
  -- 适配器模式和Proxy的区别是,前者是为对象提供不同的接口,或者为对象提供相同接口,并且前者有一点后补的味道,后者是在设计时就会运用的。

7、注意事项
  -- 在对两个无关类进行适配的时候考虑一下适配的代价,一个非常庞大的适配器可能会对系统性能有影响。

发布了97 篇原创文章 · 获赞 8 · 访问量 19万+

猜你喜欢

转载自blog.csdn.net/llorjj999/article/details/6209696