【问题标题】:Bridge design pattern with inheritance where abstract base class has member data具有继承的桥接设计模式,其中抽象基类具有成员数据
【发布时间】:2017-02-19 04:44:47
【问题描述】:

我经常使用桥接设计模式。但是我对如何在继承的对象中有效地使用它感到困惑。使用 struct apple::impl :public fruit 会产生双对象水果。我想在实现中使用抽象基类数据成员

class fruit
{
public:
    virtual void print() = 0;
private:
    int count_;
};

class apple: public fruit
{
public:
    virtual void print();
private:
    int apple_count_;
    struct impl;
    std::unique_ptr<impl> impl_;
};

struct apple::impl
{
    virtual void print() { cout << "apple"; }
};

void apple::print(){ impl_->print(); }

【问题讨论】:

  • 有三个访问修饰符:publicprivateprotected。也许看看第三个。

标签: c++ inheritance design-patterns


【解决方案1】:

桥接模式的重点是将接口与实现分开。数据成员是实现的一部分,因此它们不属于接口类或其任何超类

如果您想要可继承的实现组件,例如您的数据成员,则在更高级别执行接口/实现拆分 - 例如创建一个fruit::impl 来保存该成员,并让apple::impl 继承该成员。还要注意,实现端的类不需要继承接口端的任何类,如果它们不这样做会是一个更清晰、更简洁的设计。

【讨论】:

  • 同意。但作为一个特例,我希望抽象基类中的一些成员数据本身可以用桥接模式设计
  • @ark1974,我看不出这是个特例。我想你必须将更多的意义归结为“设计有 [the] bridge pattern”,而不仅仅是成员的类型,但我的水晶球今天恐怕有点阴天。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-16
  • 2020-10-21
  • 1970-01-01
  • 1970-01-01
  • 2015-01-28
  • 2012-03-25
  • 2016-05-08
相关资源
最近更新 更多