- Gof/State . . . . 61 matches
네트워크 커넥션을 나타내는 TCPConnection 라는 클래스를 생각해보자. TCPConnection 객체는 여러가지의 상태중 하나 일 수 있다. (Established, Listening, Closed). TCPConnection 객체가 다른 객체로부터 request를 받았을 때, TCPConnection 은 현재의 상태에 따라 다르게 응답을 하게 된다. 예를 들어 'Open' 이라는 request의 효과는 현재의 상태가 Closed 이냐 Established 이냐에 따라 다르다. StatePattern은 TCPConnection 이 각 상태에 따른 다른 행위들을 표현할 수 있는 방법에 대해 설명한다.
StatePattern 의 주된 아이디어는 네트워크 커넥션의 상태를 나타내는 TCPState 추상클래스를 도입하는데에 있다. TCPState 클래스는 각각 다른 상태들을 표현하는 모든 클래스들에 대한 일반적인 인터페이스를 정의한다. TCPState의 서브클래스는 상태-구체적 행위들을 구현한다. 예를 들어 TCPEstablished 는 TCPConnection 의 Established 상태를, TCPClosed 는 TCPConnection 의 Closed 상태를 구현한다.
TCPConnection 클래스는 TCP 커넥션의 현재 상태를 나타내는 state 객체를 가지고 있다. (TCPState 서브클래스의 인스턴스) TCPConnection 은 이 state 객체에게 모든 상태-구체적 request들을 위임 (delegate) 한다. TCPConnection 은 커넥션의 특정 상태에 대한 명령들을 수행하기 위해 TCPState 서브클래스 인스턴스를 이용한다.
커넥션이 상태를 전환할 경우, TCPConnection 객체는 사용하고 있는 state 객체를 바꾼다. 예를 들어 커넥션이 established 에서 closed 로 바뀌는 경우 TCPConnection 은 현재의 TCPEstablished 인스턴스를 TCPClosed 인스턴스로 state 객체를 교체한다.
* Context (TCPConnection)
일단, 우리는 TCPConnection 클래스를 정의한다. TCPConnection 은 데이터를 전달하고 상태 전환을 위한 request를 다루는 인터페이스를 제공한다.
class TCPConnection {
TCPConnection ();
TCPConnection 은 _state 멤버변수를 이용, TCPState 의 인스턴스를 유지한다. TCPState 클래스는 TCPConnection 의 상태-전환 인터페이스를 중복하여 가진다. 각각의 TCPState 명령들은 TCPConnection 인스턴스를 인자로서 취하며, TCPState 로 하여금 TCPConnection 으로부터 데이터를 접근하거나 현재 커넥션의 상태를 전환할 수 있도록 한다.
virtual void Transmit (TCPConnection* , TCPOctetStream* ):
virtual void ActiveOpen (TCPConnection* );
virtual void PassiveOpen (TCPConnection* );
virtual void Close (TCPConnection* );
virtual void Synchronize (TCPConnection* );
virtual void Acknowledge (TCPConnection* );
virtual void Send (TCPConnection* );
void ChangeState (TCPConnection* , TCPState* );
TCPConnection 은 상태-구체적 request들으 TCPState 인스턴스인 _state 에 위임한다. TCPConnection 은 또한 이 변수를 새로운 TCPState 로 전환하는 명령을 제공한다. TCPConnection 의 생성자는 _state를 TCPClosed 상태로 초기화한다. (후에 정의된다.)
TCPConnection::TCPConnection () {
void TCPConnection::ChangeState (TCPState* s) {
Found 1 matching page out of 7555 total pages (5000 pages are searched)
You can also click here to search title.