设计模式之状态模式实例(c++)

状态模式

允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。其别名为状态对象。

状态模式一般包含Context(环境类)、State(抽象状态类)和ConcreteState(具体状态类)。

状态模式实例之论坛用户等级

从类图可知,ForumnAccount(论坛账户类)互相关联AbstractState(抽象状态类), 账户类的downloadFile、writeNote和replyNote等操作都由状态类的相关函数来操作,方便进行状态之前的转换。

下面是c++实现的版本。

由于c++对互相关联的类和调用并不友好,需要一定的声明和定义技巧,所以下面的代码顺序有点乱。

(也可以将代码分为h头文件和cpp文件,这样就不会出现这些问题,因为我是为了方便写在同一个cpp中)

环境类ForumAccount(论坛账号类)

//环境类ForumAccount(论坛账号类)
class AbstractState;
class ForumAccount{
public:
	ForumAccount(string name);
	
	void setState(AbstractState *state){
		this->state = state;
	}
	
	AbstractState* getState(){
		return this->state;
	}
	
	string getName(){
		return this->name;
	}
	
	//定义在后面 
	void downloadFile(int score);
	
	void writeNote(int score);
	
	void replyNote(int score);
private:
	AbstractState *state;
	string name;
};

抽象类AbstractState(账号状态类) 

//抽象类AbstractState(账号状态类)
class AbstractState{
public:
	v
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值