//设计模式之访问者模式
//将操作与数据结构分离开来。适用于数据结构不变,算法经常变化的情况。
#include<iostream>
#include<list>
using namespace std;
class Man;
class Woman;
class Action
{
public:
virtual void getManCon(Man *man) = 0;
virtual void getWomanCon(Woman* woman) = 0;
};
class Success :public Action
{
public:
void getManCon(Man* man)
{
cout << "男人成功时,背后多半有一个伟大的女人" << endl;
}
void getWomanCon(Woman* woman)
{
cout << "女人成功时,别后多半有功不成功的男人," << endl;
}
};
class Fail :public Action
{
public:
void getManCon(Man *man)
{
cout << "男人失败时,闷头喝酒,谁也不用劝" << endl;
}
void getWomanCon(Woman* woman)
{
cout << "女人失败是" << endl;
}
};
class People
{
public:
virtual void Accept(Action *visitor) = 0;
};
class Man :public People
{
public:
void Accept(Action* visitor)
{
visitor->getManCon(this);
}
};
class Woman :public People
{
public:
void Accept(Action* visitor)
{
visitor->getWomanCon(this);
}
};
class Objcstructure
{
list<People*> link;
list<People*>::iterator it;
public:
void AddLink(People* people)
{
link.push_back(people);
}
void Detach(People* people)
{
link.remove(people);
}
void Display(Action* visitor)
{
for (it = link.begin(); it != link.end(); it++)
{
(*it)->Accept(visitor);
}
}
};
int main()
{
Objcstructure* ob = new Objcstructure();
ob->AddLink((new Man));
ob->AddLink((new Woman));
Action *success = new Success();
ob->Display(success);
Action *fail = new Fail();
ob->Display(fail);
system("pause");
return 0;
}
设计模式之访问者模式
最新推荐文章于 2019-05-07 15:45:23 发布