23种设计模式之访问者模式(行为型,8 Visitor,c++实现)

23种设计模式之访问者模式(行为型,8 Visitor,c++实现)

23种设计模式之访问者模式(行为型,8 Visitor,c++实现)

代码实现:

#include <iostream>

#include <string>

#include "list"


using namespace std;


class Visitor;


class ParkElement

{

public:

virtual void accept(Visitor* visitor) = 0;

};


class Visitor

{

public:

virtual void visit(ParkElement* park) = 0;

};


class ParkA : public ParkElement

{

public:

virtual void accept(Visitor* visitor)

{

visitor->visit(this);

}

};


class ParkB : public ParkElement

{

public:

virtual void accept(Visitor* visitor)

{

visitor->visit(this);

}

};


class Park : public ParkElement

{

public:

Park()

{

parkElements.clear();

}

void addParkElement(ParkElement* pe)

{

parkElements.push_back(pe);

}

virtual void accept(Visitor* visitor)

{

for (list<ParkElement*>::iterator it = parkElements.begin(); it != parkElements.end(); it++)

{

(*it)->accept(visitor);

}

}

private:

list<ParkElement*> parkElements;

};


class VisitorA :public Visitor

{

public:

virtual void visit(ParkElement* park)

{

cout << "VisitorA visit park" << endl;

}

};


class VisitorB :public Visitor

{

public:

virtual void visit(ParkElement* park)

{

cout << "VisitorB visit park" << endl;

}

};


class VisitorManager :public Visitor

{

public:

virtual void visit(ParkElement* park)

{

cout << "VisitorManager visit park" << endl;

}

};


void main01()

{

ParkElement* parkA = new ParkA;

ParkElement* parkB = new ParkB;


Visitor* visitorA = new VisitorA;

Visitor* visitorB = new VisitorB;


parkA->accept(visitorA);

parkB->accept(visitorB);


delete parkA;

delete parkB;

delete visitorA;

delete visitorB;

}



void main()

{

ParkElement* parkA = new ParkA;

ParkElement* parkB = new ParkB;

Park* park = new Park;

park->addParkElement(parkA);

park->addParkElement(parkB);


Visitor* visitorManager = new VisitorManager;


park->accept(visitorManager);


delete parkA;

delete parkB;

delete park;

delete visitorManager;

}



相关文章:

  • 2021-08-26
  • 2022-03-08
  • 2021-12-28
  • 2021-11-02
  • 2021-08-12
  • 2022-12-23
  • 2021-10-17
猜你喜欢
  • 2022-12-23
  • 2021-12-12
  • 2021-04-04
  • 2021-05-20
  • 2021-09-04
  • 2021-07-08
相关资源
相似解决方案