设计模式----状态模式

状态模式

类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。
跟MM交往时,一定要注意她的状态哦,在不同的状态时她的行为会有不同,比如你约她今天晚上去看电影,对你没兴趣的 MM就会说“有事情啦”,对你不讨厌但还没喜欢上的MM就会说“好啊,不过可以带上我同事么?”,已经喜欢上你的MM就会说“几点钟?看完电 影再去泡吧怎么样?”,当然你看电影过程中表现良好的话,也可以把MM的状态从不讨厌不喜欢变成喜欢哦。(来自单身狗的猜想)

#include <iostream>
using namespace std;

class Context;

class State
{
public:
	virtual void Operation(Context *pContext) = 0;
};

class Context
{
private:
	State * m_state;
public:
	Context(State * p)
	{
		m_state = p;
	}
	~Context()
	{
		if (nullptr != m_state)
			delete m_state;
	}
	void SomeOperation()
	{
		m_state->Operation(this);
	}
	void setState(State * p)
	{
		delete m_state;
		m_state = p;
	}
};

class ConcreteStateA : public State
{
public:
	void Operation(Context * pContext);
};

class ConcreteStateB : public State
{
	void Operation(Context * pContext)
	{
		std::cout << "OperationB" << std::endl;
		// 这里有一个要更换状态,主要看实际需求
		pContext->setState(new ConcreteStateA());
	}
};

 void ConcreteStateA::Operation(Context * pContext)
 {
	 std::cout << "OperationA" << std::endl;
	 // 这里有一个要更换状态,主要看实际需求
	 pContext->setState(new ConcreteStateB());
 }

 int main()
{
	using namespace std;
	// 状态模式
	Context *p = new Context(new ConcreteStateA());
	p->SomeOperation();
	p->SomeOperation();
	delete p;
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值