访问者模式
来源:互联网 发布:淘宝女包店铺介绍 编辑:程序博客网 时间:2024/06/05 03:29
#include <iostream>
#include <string>
//#include <afx.h>
#include <vector>
#include <list>
using namespace std;
class Man;
class Woman;
class Action
{
public:
string status;
public:
virtual void GetManConclusion(Man *concreteElementA) = 0;
virtual void GetWomanConclusion(Woman *concreteElementA) = 0;
};
class Success:public Action
{
public:
Success()
{
status = "成功";
}
virtual void GetManConclusion(Man *concreteElementA);
virtual void GetWomanConclusion(Woman *concreteElementB);
};
class Fail:public Action
{
public:
Fail()
{
status = "失败";
}
virtual void GetManConclusion(Man *concreteElementA);
virtual void GetWomanConclusion(Woman *concreteElementB);
};
class Person
{
public:
string sex;
public:
virtual void PersonAccept(Action *visitor) = 0;
};
class Man:public Person
{
public:
Man()
{
sex = "男人";
}
virtual void PersonAccept(Action *visitor)
{
visitor->GetManConclusion(this);
}
};
class Woman:public Person
{
public:
Woman()
{
sex = "女人";
}
virtual void PersonAccept(Action *visitor)
{
visitor->GetWomanConclusion(this);
}
};
void Success::GetManConclusion(Man *concreteElementA)
{
cout<<concreteElementA->sex<<this->status<<"背后多半有一个伟大的女人\n";
}
void Success::GetWomanConclusion(Woman *concreteElementB)
{
cout<<concreteElementB->sex<<this->status<<"背后大多有一个不成功的男人\n";
}
void Fail::GetManConclusion(Man *concreteElementA)
{
cout<<concreteElementA->sex<<this->status<<"闷头喝酒,谁也不用劝\n";
}
void Fail::GetWomanConclusion(Woman *concreteElementB)
{
cout<<concreteElementB->sex<<this->status<<"眼泪旺旺,谁也劝不了\n";
}
class ObjectStructure
{
list<Person *>CI;
list<Person *>::iterator i;
public:
void Attach(Person * p)
{
CI.push_back(p);
}
void Detach()
{
CI.pop_back();
}
void Display(Action *a)
{
for (i = CI.begin(); i != CI.end(); ++i)
(*i)->PersonAccept(a);
}
};
int main()
{
ObjectStructure o;
o.Attach(new Man());
o.Attach(new Woman());
Success v1;
o.Display(&v1);
Fail v2;
o.Display(&v2);
cout<<"\nOK\n";
return 1;
}
#include <string>
//#include <afx.h>
#include <vector>
#include <list>
using namespace std;
class Man;
class Woman;
class Action
{
public:
string status;
public:
virtual void GetManConclusion(Man *concreteElementA) = 0;
virtual void GetWomanConclusion(Woman *concreteElementA) = 0;
};
class Success:public Action
{
public:
Success()
{
status = "成功";
}
virtual void GetManConclusion(Man *concreteElementA);
virtual void GetWomanConclusion(Woman *concreteElementB);
};
class Fail:public Action
{
public:
Fail()
{
status = "失败";
}
virtual void GetManConclusion(Man *concreteElementA);
virtual void GetWomanConclusion(Woman *concreteElementB);
};
class Person
{
public:
string sex;
public:
virtual void PersonAccept(Action *visitor) = 0;
};
class Man:public Person
{
public:
Man()
{
sex = "男人";
}
virtual void PersonAccept(Action *visitor)
{
visitor->GetManConclusion(this);
}
};
class Woman:public Person
{
public:
Woman()
{
sex = "女人";
}
virtual void PersonAccept(Action *visitor)
{
visitor->GetWomanConclusion(this);
}
};
void Success::GetManConclusion(Man *concreteElementA)
{
cout<<concreteElementA->sex<<this->status<<"背后多半有一个伟大的女人\n";
}
void Success::GetWomanConclusion(Woman *concreteElementB)
{
cout<<concreteElementB->sex<<this->status<<"背后大多有一个不成功的男人\n";
}
void Fail::GetManConclusion(Man *concreteElementA)
{
cout<<concreteElementA->sex<<this->status<<"闷头喝酒,谁也不用劝\n";
}
void Fail::GetWomanConclusion(Woman *concreteElementB)
{
cout<<concreteElementB->sex<<this->status<<"眼泪旺旺,谁也劝不了\n";
}
class ObjectStructure
{
list<Person *>CI;
list<Person *>::iterator i;
public:
void Attach(Person * p)
{
CI.push_back(p);
}
void Detach()
{
CI.pop_back();
}
void Display(Action *a)
{
for (i = CI.begin(); i != CI.end(); ++i)
(*i)->PersonAccept(a);
}
};
int main()
{
ObjectStructure o;
o.Attach(new Man());
o.Attach(new Woman());
Success v1;
o.Display(&v1);
Fail v2;
o.Display(&v2);
cout<<"\nOK\n";
return 1;
}
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 收敛时间
- 【收集】C++ 中实现has-a关系
- linux汇编之——(6)反汇编条件控制
- 第八次上级报告
- startActivityForResult用法详解
- 访问者模式
- JSON 字符串 与 java 对象的转换
- phpcms使用cookie的方法
- Java学习心得--异常
- Android启动过程 && Activity的生命周期 && Activity的开机自启动
- 验证oracle决定使用索引时会使用ROWID来访问数据
- QT学习,最简单的Web浏览器
- ndk gdb 调试开发
- phpcms使用session的方法