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

本文介绍了设计模式中的状态模式,通过论坛用户等级为例,阐述了如何使用状态模式来改变对象的行为。论坛账户类ForumnAccount与抽象状态类AbstractState交互,其不同操作如downloadFile、writeNote和replyNote由具体状态类(PrimaryState、MiddleState、HighState)实现,以便于在不同状态间转换。文章提供了C++代码实现,展示了如何处理状态之间的转换和互相关联的类的声明与定义。
摘要由CSDN通过智能技术生成

状态模式

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

状态模式一般包含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:
	virtual void checkState(int score) = 0;
	
	virtual void downloadFile(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值