《设计模式》笔记:状态模式

    _________________________基本概念,copy from 百度百科______________________

状态模式(State Pattern)是设计模式的一种,属于行为模式。

定义(源于Design Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。
状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况。 把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化
意图:允许一个对象在其内部状态改变时改变它的行为
适用场景:
1.一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。
2.一个操作中含有庞大的多分支结构,并且这些分支决定于对象的状态。
__________________________UML图_______________________________________
 
个人理解,两个关键点:
1)Context把任务委托给当前的ConcreteState;
2)state模式中的各种具体的state类中的operation方法在处理Context的请求时,还要设置好Context的后继state。逻辑判断被分割到一个个具体的类中,减少了相互间的耦合性。
另外,具体状态类多采用单件模式来实现。
 
__________________________实践________________________________________
《设计模式》一书中提高的TCP状态类的例子:
一个ConcreteState类,TCPlisten的单件模式实现
#include "Tcpstate.h"
class TcpListen :
	public TcpState
{
public:
	static TcpState *Instance();
	virtual void send(TcpConnection*);
private:
	static TcpState* _instance;
};


TcpState *TcpListen::_instance=0;

void TcpListen::send(TcpConnection *t){
	printf("Server send SYN,receive SYN,ACK,etc\n");
	changeState(t,TcpEstablished::Instance());
}

TcpState *TcpListen::Instance(){
	printf("In TCPLISTEN state\n");
	if(TcpListen::_instance==0){
		_instance=new TcpListen;
	}
	return _instance;
}

 
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值