📄 c20-状态模式例.txt
字号:
//状态模式例
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:
static TCPListen * Instance();
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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -