访问者模式

 

#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);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值