sách gpt4 ăn đã đi

c++ - Chế độ khách + nguyên tắc đóng/mở

In lại Tác giả: IT Lão Cao 更新时间:2023-10-28 22:21:32 27 4
mua khóa gpt4 giày nike

是否可以实现 Visitor Pattern尊重 Open/Closed Principle ,但仍然可以添加新的可访问类?

开放/封闭原则指出“软件实体(类、模块、函数等)应该对扩展开放,但对修改关闭”。

struct ConcreteVisitable1;
struct ConcreteVisitable2;

struct AbstractVisitor
{
virtual void visit(ConcreteVisitable1& concrete1) = 0;
virtual void visit(ConcreteVisitable2& concrete2) = 0;
};

struct AbstractVisitable
{
virtual void accept(AbstractVisitor& visitor) = 0;
};

struct ConcreteVisitable1 : AbstractVisitable
{
virtual void accept(AbstractVisitor& visitor)
{
visitor.visit(*this);
}
};

struct ConcreteVisitable2 : AbstractVisitable
{
virtual void accept(AbstractVisitor& visitor)
{
visitor.visit(*this);
}
};

您可以实现任意数量的从 AbstractVisitor 派生的类:它对扩展开放。您不能添加新的可访问类,因为从 AbstractVisitor 派生的类将无法编译:它已关闭以供修改。

AbstractVisitor 类树遵循开放/封闭原则。AbstractVisitable 类树不遵守开闭原则,因为它无法扩展。

除了如下扩展 AbstractVisitor 和 AbstractVisitable 之外,还有其他解决方案吗?

struct ConcreteVisitable3;

struct AbstractVisitor2 : AbstractVisitor
{
virtual void visit(ConcreteVisitable3& concrete3) = 0;
};

struct AbstractVisitable2 : AbstractVisitable
{
virtual void accept(AbstractVisitor2& visitor) = 0;
};

struct ConcreteVisitable3 : AbstractVisitable2
{
virtual void accept(AbstractVisitor2& visitor)
{
visitor.visit(*this);
}
};

câu trả lời hay nhất

在 C++ 中,Acyclic Visitor (pdf) 得到你想要的。

关于c++ - 访客模式+开放/封闭原则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/171755/

27 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress