visitor settlement + open/closed principle
is illusory exercise respecting , nonetheless still means supplement new visitable classes?
the open/closed component states "software entities (classes, modules, functions, etc.) should open extension, nonetheless closed modification".
struct concretevisitable1;
struct concretevisitable2;
struct abstractvisitor
{
practical vacant visit(concretevisitable1& concrete1) = 0;
practical vacant visit(concretevisitable2& concrete2) = 0;
};
struct abstractvisitable
{
practical vacant accept(abstractvisitor& visitor) = 0;
};
struct concretevisitable1 : abstractvisitable
{
practical vacant accept(abstractvisitor& visitor)
{
visitor.visit(*this);
}
};
struct concretevisitable2 : abstractvisitable
{
practical vacant accept(abstractvisitor& visitor)
{
visitor.visit(*this);
}
};
you exercise any array classes derives abstractvisitor: open extension. can't supplement new visitable category classes subsequent abstractvisitor compile: closed modification.
the abstractvisitor category tree respects open/closed principle.
the abstractvisitable category tree does honour open/closed principle, can't extended.
is there any fortitude extend abstractvisitor abstractvisitable below?
struct concretevisitable3;
struct abstractvisitor2 : abstractvisitor
{
practical vacant visit(concretevisitable3& concrete3) = 0;
};
struct abstractvisitable2 : abstractvisitable
{
practical vacant accept(abstractvisitor2& visitor) = 0;
};
struct concretevisitable3 : abstractvisitable2
{
practical vacant accept(abstractvisitor2& visitor)
{
visitor.visit(*this);
}
};
Comments
Post a Comment