具有继承的桥接设计模式,其中抽象基类具有成员数据

时间:2016-10-10 17:34:01

标签: c++ inheritance design-patterns

我定期使用桥梁设计模式。但我很困惑如何在继承的对象中有效地使用它。使用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(); }

1 个答案:

答案 0 :(得分:0)

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

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