, , .
, :
ShapeVisitor. Visit . : Visit(Circle*), Visit(Square*) ..AcceptVisitor(ShapeVisitor*).- Shape
AcceptVisitor visitor->Visit(this) CAD ( -a, ) a ShapeVisitor. Visit Shape. .
, Visitor :
class Circle;
class Square;
class ShapeVisitor
{
virtual void Visit(Circle *circle) = 0;
virtual void Visit(Square *square) = 0;
}
class Shape
{
virtual void AcceptVisitor(ShapeVisitor *visitor) = 0;
}
class Circle : public Shape
{
virtual void AcceptVisitor(ShapeVisitor *visitor)
{
visitor->Visit(this);
}
}
class Square : public Shape
{
virtual void AcceptVisitor(ShapeVisitor *visitor)
{
visitor->Visit(this);
}
}
class CAD : public ShapeVisitor
{
virtual DrawCircle(Circle *circle) = 0;
virtual DrawSquare(Square *square) = 0;
virtual void Visit(Circle *circle) {
DrawCircle(circle);
}
virtual void Visit(Square *square) {
DrawSquare(square);
}
}
class SWX : public CAD
{
virtual DrawCircle(Circle *circle){
}
class PRO : public CAD
{
virtual DrawCircle(Circle * circle){
}
int main()
{
Circle * circle = new Circle();
Square * sq = new Square;
vector<Shape*> shapes;
shapes.push_back(circle);
shapes.push_back(sq);
SWX * swx = new SWX();
for( int i = 0 ; i < shapes.size() ; ++i )
{
shapes[i]->AcceptVisitor(SWX);
}
}
CAD ShapeVisitor. , CAD , Visit ( ), . AcceptVisitor Draw *, , Visit ( : , , Visit(Foo*) DrawFoo(Foo*)).