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 + -
显示快捷键?