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



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

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

如果你想要可继承的实现组件,比如你的数据成员,那么在更高的层次上执行接口/实现分离——例如,创建一个fruit::impl来保存成员,并让apple::impl继承它。还要注意,实现端的类不需要继承接口端的任何类,如果不这样做,设计会更清晰、更简洁。

最新更新