arkulo56 / thought

记录所有可记录的零碎技术点,请关注Issues
20 stars 9 forks source link

<<简单通俗系列>>适配器模式 #50

Open arkulo56 opened 9 years ago

arkulo56 commented 9 years ago

如果一个前辈写的类(具有一定的功能,且其他程序在调用,不能修改)在系统中有新的需求,需要改造加入其他的东西或者变更内部结构。这时候暴力的解决办法就是直接将这个类的文件复制一份,然后修改新的文件重新改出一份新的。这种做法的缺点是,如果两个类(新的和旧的)通用的功能需要整体修改,我们就需要修改两份代码,维护起来很不方便!

我们来看看用适配器怎么解决这种问题

类图和时序图

https://raw.githubusercontent.com/arkulo56/thought/master/fotosay/%E9%80%82%E9%85%8D%E5%99%A8%E7%B1%BB%E5%9B%BE.png

从图中就可以看出,适配器是分为类适配器和对象适配器两种的,其实远离比较简单:

  1. 类适配器就是继承老的类和新的接口,然后外部调用的时候,在适配器中组合老的类方法。这里需要注意的是如果语言不支持继承多个父类(例如php),那这时候种方式写起来就比较麻烦
  2. 对象适配器就比较简单了,将老的类实例华对象传给适配器,该适配器继承了规定好的接口,然后在适配器内部调用老的类中的方法