访问者模式
来源:互联网 发布:淘宝店铺皇冠和钻石 编辑:程序博客网 时间:2024/05/02 04:13
#include <iostream.h>
#include <string.h>
//访问者模式
//将对象针对某种对象会发生的状态作出相应的行为
//关键词: 对象 状态 行为
//对象产生状态,状态激起对象的相应反应(可能是行为也可是另外的一种状态)
//即对象对状态的处理需要状态作为参数,而处理需要的结果又是由状态产生
//所以对象又将自己作为参数传递给状态的相应方法去处理
//好处是在对象分类稳定的前提下但状态需要增加的时候,只需要增加状态就行,代码改动很少
class person //抽象对象类 人
{
public:
char *type; //性别
public:
person(){}
virtual ~person(){}
};
class status //抽象状态类
{
protected:
char *sts; //状态
public:
status(){}
virtual ~status(){}
public:
virtual void GetObjRelForSt(person *per) = 0 ; //获取对象在相应状态下的反应
};
class Success : public status
{
public:
Success(){sts = "成功";}
virtual ~Success(){}
public:
virtual void GetObjRelForSt(person *per) //直接作出对象的相应反应即可
{
if(!strcmp("男人",per->type))
cout << per->type << this->sts << "背后寡然" << endl;
else
cout << per->type << this->sts << "背后人众" << endl;
}
};
class Worse : public status
{
public:
Worse(){sts = "失败";}
virtual ~Worse(){}
public:
virtual void GetObjRelForSt(person *per) //直接作出对象的相应反应即可
{
if(!strcmp("男人",per->type))
cout << per->type << this->sts << "沉默寡言" << endl;
else
cout << per->type << this->sts << "哭天哭地" << endl;
}
};
class Man : public person
{
public:
Man(){type = "男人";}
virtual ~Man(){}
public:
void GetPersonStatus(status *status)
{
status->GetObjRelForSt(this);
}
};
class Woman : public person
{
public:
Woman(){type = "女人";}
virtual ~Woman(){}
public:
void GetPersonStatus(status *status)
{
status->GetObjRelForSt(this);
}
};
void main()
{
person *man = new Man();
person *woman = new Woman();
status *success = new Success();
static_cast<Man*>(man)->GetPersonStatus(success);
static_cast<Woman*>(woman)->GetPersonStatus(success);
}
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- js 常用
- Katta如何使用Zookeeper-数据更新
- Katta如何使用Zookeeper-数据更新2
- ArcGis featureLayer中添加字段
- Katta如何使用Zookeeper-数据更新3
- 访问者模式
- 你所未见的阿富汗---越来越喜欢网易
- makefile 函数
- 关于sql的格式化问题.
- 掌间无限—农科频道客户端知识点历览
- Const用法小结
- drawable-(hdpi,mdpi,ldpi)的区别
- 访问控制
- Maven plugin-surefire : testing for spring and POJO