c20-Φ

来自「C++面向对象课程设计课件」· 代码 · 共 65 行

TXT
65
字号
//状态模式例

class TCPState;
classs TCPConnection 
{
public:	
	TCPConnection() 
		{_state=TCPColsed::Instance();}

	void ActiveOpen() 
		{_state->ActiveOpen();}
	void PassiveOpen()	
		{_state=PassiveOpen();}
	void Close()
		{_state->Close(this);}		
	void Send();
	void Acknowledge()
		{_state->Acknowledge(this);}
	void Synchronize()
		{_state->Synchronize(this);}

	void ChangeState(TCPState * s) 	
		{_state=s;}
private:
	TCPState   * _state; 
};

class TCPState
{
public:
	virtual void ActiveOpen(TCPConnection * cnn) {}
	virtual void PassiveOpen(TCPConnection * cnn) {}
	virtual void Close(TCPConnection * cnn) {}
	virtual void Acknowledge(TCPConnection * cnn) {}
	virtual void Synchronize(TCPConnection * cnn) {}
	virtual void Send(TCPConnection * cnn) {}
protected:
	void ChangeState(TCPConnection * cnn,TCPState * sta)
	{	cnn->ChangeState(sta);	}
};

class TCPEstablished:public TCPState
{
public:
	static TCPState * Instance();
	virtual void Close(TCPConnection * cnn)
		{ChangeState(cnn,TCPListen::Instance());}
};
class TCPListen:public TCPState
{
public:
	virtual void Send(TCPConnection * cnn) 
		{ChangeState(cnn,TCPEstablished::Instance());}	
};

class TCPClosed:public TCPState
{
public:
	static TCPState * Instance();	
	virtual void ActiveOpen(TCPConnection * cnn)
		 {ChangeSate(cnn,TCPEstablished::Instance());}
	virtual void PassiveOpen(TCPConnection * cnn) 
		{ChangeState(cnn,TCPListen::Instance());}	
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?