设计模式读书笔记:State(状态)

原创 2015年07月10日 21:27:54

意图:

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

结构图:来自 《23种设计模式 - 郗晓勇》


实现:https://github.com/panshiqu/patterns/tree/master/State

Context

namespace NS_STATE {

class State;
class Context {
public:
	Context(State *state) : _state(state) {}
	virtual ~Context() {}
	void request(void);

private:
	friend class State;
	void changeState(State *state);

private:
	State *_state;
};

} /* namespace NS_STATE */
#include "Context.h"
#include "State.h"

namespace NS_STATE {

void Context::request(void)
{
	_state->handle(this);
}

void Context::changeState(State *state)
{
	_state = state;
}

} /* namespace NS_STATE */

State

#include "Context.h"

namespace NS_STATE {

class State {
public:
	State() {}
	virtual ~State() {}
	virtual void handle(Context *context) = 0;

protected:
	void changeState(Context *context, State *state)
	{
		context->changeState(state);
	}
};

} /* namespace NS_STATE */

ConcreteStateA

#include "State.h"
#include "ConcreteStateB.h"
#include <iostream>

namespace NS_STATE {

class ConcreteStateA : public State
{
public:
	ConcreteStateA() {}
	virtual ~ConcreteStateA() {}
	virtual void handle(Context *context)
	{
		std::cout << "ConcreteStateA." << std::endl;
		changeState(context, ConcreteStateB::getInstance());
	}
};

} /* namespace NS_STATE */
ConcreteStateB

#include "State.h"
#include <iostream>

namespace NS_STATE {

class ConcreteStateB : public State
{
public:
	ConcreteStateB() {}
	virtual ~ConcreteStateB() {}
	static ConcreteStateB *getInstance(void)
	{
		static ConcreteStateB instance;
		return &instance;
	}
	virtual void handle(Context *context)
	{
		std::cout << "ConcreteStateB." << std::endl;
	}
};

} /* namespace NS_STATE */
main

#include "State/Context.h"
#include "State/ConcreteStateA.h"
#include "State/ConcreteStateB.h"
using namespace NS_STATE;
int main(void)
{
	ConcreteStateA csa;
	Context c(&csa);
	c.request();
	c.request();
}
附加:

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

设计模式读书笔记-----状态模式

转载:http://blog.csdn.net/chenssy/article/details/11096391#comments 如侵犯你的权利,请告知,会及时删除。 在介绍...

《Android源码设计模式解析与实战》读书笔记(八)——状态模式

这两章都比较简单,就不多说废话,直入主题。 第八章 随遇而安——状态模式 顾名思义,状态模式,肯定跟状态有关系,它是根据状态来决定行为的,即不同状态有不同行为。听起来就跟策略模式很像,不错,都说状...

大话设计模式读书笔记(十三) 状态模式

状态模式: 状态模式定义: 状态模式(State):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像改变了其子类。 状态模式UMl类图: 状态模式Java代码实现 public cla...
  • xsyfl
  • xsyfl
  • 2017-04-17 19:48
  • 96

C++设计模式读书笔记

  • 2009-11-18 15:45
  • 1.64MB
  • 下载

设计模式学习笔记——状态(State)模式框架

设计模式学习笔记——状态(State)模式框架@(设计模式)[设计模式, 状态模式, State]设计模式学习笔记状态State模式框架 基本介绍 状态案例 类图 实现代码 State接口 DaySt...

设计模式C++学习笔记之十九(State状态模式)

设计模式C++学习笔记之十九(State状态模式) 19.1.解释 概念:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。 main(),客户 CLiftState...

设计模式学习笔记---状态模式state pattern(Java版)

一、场景 红绿灯 红灯、黄灯、绿灯 网上购物,订单的状态 下单、已付款、已发货、送货中、已收货 电梯运行 维修、正常、自动开关、自动开门、消防状态、向上运动、向下运动 酒店系统,房间的状...

设计模式学习笔记--状态(State)模式

状态模式和策略模式容易混淆。 状态模式从结构图、示例性演示代码来看,都和策略模式一致,他们最大的区别,是内涵不同。 策略模式,是对一种业务场景,多种算法的实现,比如促销 --》多买多折促销、满减促销;...

【设计模式】《Head First 设计模式》读书笔记——状态模式

状态模式: 允许对象在内部状态改变时改变它的行为,对象看起来好想修改了它的类。 问题简单描述: 需要实现一个糖果自动售货机。原先的售货机状态转化如下: 后需求变动添加了10%概率双倍糖...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)