c++设计模式之访问者模式
2017-06-25 16:18
363 查看
#include <iostream> #include <list> #include <string> using namespace std; class CPerson; class CStudent; class CTeacher; class CVisitor; class CPrinter; class CPerson { protected: string name; int gender; CPerson(){} public: virtual void Accept(CVisitor&) = 0; public: void SetName(const string& name) { this->name = name; } string GetName()const { return name; } void SetGender(const int& gender) { this->gender = gender; } int GetGender() const { return gender; } }; class CVisitor { public: virtual void Visit(CStudent&) = 0; virtual void Visit(CTeacher&) = 0; }; class CStudent :public CPerson { private: int grade; public: CStudent(string name, int gender, int grade) { this->name = name; this->gender = gender; this->grade = grade; } public: virtual void Accept(CVisitor& printer) { printer.Visit(*this); } void SetGrade(int grade) { this->grade = grade; } int GetGrade()const { return grade; } }; class CTeacher :public CPerson { private: int service_time; public: CTeacher(string name, int gender, int service_time) { this->name = name; this->gender = gender; this->service_time = service_time; } public: virtual void Accept(CVisitor& printer) { printer.Visit(*this); } void SetServiceTime(int service) { this->service_time = service_time; } int GetServiceTime() const { return service_time; } }; class CPrinter :public CVisitor { public: void Visit(CStudent& s) { cout << "student:" << endl; cout << "\tname: " << s.GetName() << endl; if (0 == s.GetGender()) cout << "\tGender:" << "female" << endl; else cout << "\tGender:" << "male" << endl; cout << "\tGrade:" << s.GetGrade() << endl; } void Visit(CTeacher& s) { cout << "Teacher:" << endl; cout << "\tname: " << s.GetName() << endl; if (0 == s.GetGender()) cout << "\tGender:" << "female" << endl; else cout << "\tGender:" << "male" << endl; cout << "\tServiceTime:" << s.GetServiceTime() << endl; } }; class Organization { private: typedef list<CPerson*> CMemberList; CMemberList member_list; public: void Add(CPerson* person) { member_list.push_back(person); } void PrintMembers(CPrinter& printer) { CMemberList::iterator it = member_list.begin(); for (; it != member_list.end(); ++it) { (*it)->Accept(printer); } } ~Organization() { CMemberList::iterator it = member_list.begin(); for (; it != member_list.end(); ++it) { delete *it; } } }; int main() { Organization *Planting = new Organization(); Planting->Add(new CTeacher("aa", 1, 10)); Planting->Add(new CStudent("bb", 0, 1)); Planting->Add(new CStudent("cc", 1, 2)); CPrinter printer; Planting->PrintMembers(printer); cin.get(); }
相关文章推荐
- C++设计模式--访问者模式
- 设计模式C++实现二十三:访问者模式
- C++设计模式之十九--Visitor访问者模式
- C++设计模式——访问者模式
- 设计模式---访问者模式(C++实现)
- C++设计模式之访问者模式
- 设计模式--访问者模式C++实现
- c++设计模式-----访问者模式visitor
- 设计模式之访问者模式,C++实现
- C++设计模式之访问者模式
- 详解C++设计模式编程中对访问者模式的运用
- C++ 设计模式 —— 访问者(Visitor)
- 设计模式C++版:第二十二式访问者模式
- 设计模式C++实现(21)——访问者模式
- C++设计模式[二十一]访问者模式
- 设计模式之访问者模式,C++实现
- 设计模式观后(c++还原之二十二 访问者模式)
- C++设计模式之二十三:Visitor(访问者模式)
- 设计模式---访问者模式(C++实现)
- c++23种设计模式之访问者模式