在c ++中实现适配器模式的最佳方法是什么

时间:2017-07-27 21:37:56

标签: c++ design-patterns adaptor

我已经看到可以使用继承,例如:

class A {
};

class Legacy{
};

class B : public A, private Legacy {
};

但是从两个不同的类继承公共和私人对我来说很奇怪。有没有其他方法来实现适配器模式?

2 个答案:

答案 0 :(得分:2)

通常最好使用组合而不是继承来实现适配器(以及许多其他情况):

class B : public A {
  public:
    /* implementation of abstract methods of A with calls to Legacy */

  private:
    Legacy m_leg;
};

答案 1 :(得分:0)

这里使用的是类Adapter。使用适配器本身是一种妥协(当我们无法控制Legacy Adaptee但仍想使用它时,我们使用适配器)。出于特定目的(匹配所需和提供的接口),我们强制Adapter从Adaptee和Target继承。因此,Adapter类(遭受多重继承)不是跨应用程序的可重用域类,它只是一个(AKA)包装类。它的" IsA"与Adaptee以及Target的关系是有力的,而不是自然地来自领域模型。

即便如此,正如@dlasalle指出的那样,使用对象适配器通过合成将使其使用更安全。但选择取决于两种类型之间的权衡。例如如果适配器的80%的功能是按原样发布的,那么Class适配器是避免为所有80%编写包装器方法的不错选择。 C ++实现可以选择使用Java没有的类适配器(适当注意)。