我定期使用桥梁设计模式。但我很困惑如何在继承的对象中有效地使用它。使用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(); }
答案 0 :(得分:0)
Bridge模式的要点是将接口与实现分开。数据成员是实现的一部分,因此它们不属于接口类或其任何超类。
如果您想要可继承的实现组件(例如数据成员),则在更高级别执行接口/实现拆分 - 例如创建一个fruit::impl
来保存该成员,并apple::impl
继承该成员。另请注意,实现端的类不需要从接口端的任何类继承,并且它们将是一个更清晰,更清晰的设计,不会这样做。