七:适配器模式

适配器模式是我花了最多的时间来理解的模式。那就说说我的理解吧。

适配器模式是把类A转化成类B的一种方法。为啥要这样做呢?是啊,其实我们本身应该没有这个需求的,但凡事有例外。 假如一号同事写了个函数funOne(B* b); 类B需要实现虚函数do();你一看,这个要实现的虚函数的功能,不就是二号同事写的类A的specialDo()函数实现的功能吗。这个时候你肯定想着一号同事把接口改为funOne(A* a);这样你啥都不用干也许就完成了一个复杂的业务。但很可能你会和一号同事争执起来。类A和类B是两个概念,接口的设计是映射了现实逻辑的。同时改这个接口会把对B相关的依赖全部改成对A的,工作量也不会小,而且极易出错。这时,你可能回去找二号同事了,想着把类A改造如下

class A : B{

   do(){    specialDo(); }

}

这样感觉还不错,问题完美解决。但是,我们有没有只靠自己的办法呢。毕竟我们污染了类A的代码,如果遇到外部的库呢,你根本没法修改类A。这就出现了适配器模式。我们只需要创建一个适配器类就行了

class Adapter : B{

  Adapter(A* a){ m_a = a;}

   do(){ m_a.specialDo(); }

}

大家都不用改,我们传入Adapter就OK了。很完美,而且符合面向对象设计原则。

网上对适配器模式分的很细。A* m_a; 改成 A m_a;就是对象适配器。 class Adapter : B{}改成class Adapter : B, A{} 就是类适配器。这其实把问题搞复杂了。记住我最开始说的,适配器模式是把类A转化成类B的一种方法。跟着上面的思路一步一步思索,代码自然就出来了。

你可能感兴趣的:(七:适配器模式)