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

Popular posts from this blog

list macos calm editors formula editors

how hibernate @any-related annotations?

why does floated <input> control floated component slip over too distant right ie7, nonetheless firefox?