php 디자인 모드 State(상태 모드)

3347 단어
상태 state 모드는 GOF23 모드 중 하나이며 명령 모드와 마찬가지로 동작 모드이기도 합니다.상태 모델과 명령 모델은 상당히 비슷하다. 마찬가지로'인터페이스―실현류'라는 모델의 응용은 인터페이스 프로그래밍 원칙에 대한 구현이다.
상태 모드는 대상 창설형 모드에 속하는데 그 의도는 한 대상이 내부 상태가 바뀔 때 행동을 바꾸도록 허용하는 것이다. 대상은 그의 클래스를 수정한 것처럼 보인다.비교적 흔히 볼 수 있는 예는 네트워크 연결을 나타내는 클래스인 TCPConnection이다. TCPConnection 대상의 상태는 몇 가지 다른 상태 중 하나이다. 연결이 이미 구축되었다(Established), 감청 중, 연결이 닫혔다(closed).TCPConnection 객체가 다른 객체로부터 요청을 받으면 그는 자신의 상태에 따라 다른 반응을 보입니다.
예를 들어 Open 요청의 결과는 연결이 닫혔는지 설정되었는지 여부에 의존합니다.State 모드는 TCPConnection이 각 상태에서 어떻게 서로 다른 행동을 나타낼 수 있는지 설명한다.이 모델의 관건적인 사상은 TCPState라고 불리는 추상적인 클래스가 네트워크의 연결 상태를 나타내는 것을 도입하고 TCPState 클래스는 서로 다른 조작 상태를 나타내는 각종 클래스로 공공 인터페이스를 설명하는 것이다.TCPState의 하위 클래스는 특정 상태와 관련된 행동을 수행합니다.예를 들어 TCPEStablished와 TCPClosed 클래스는 각각 TCPConnection에 특정한 연결이 설정된 상태와 연결이 닫힌 상태를 실현한다.
예를 들어 한 사람은 생기, 기쁨, 미치광이 등의 상태를 가지고 있다. 이런 상태에서 같은 일을 하면 다른 결과가 있을 수 있고, 한 사람의 마음은 이 세 가지 상태에서 순환적으로 바뀔 수 있다.하나의 moodState 클래스를 사용하면 한 사람의 마음을 나타내고mad,Happy,Angry 클래스를 사용하면 다른 마음을 나타낸다.
먼저 하나의 예를 보십시오.
 
  
/**
*
*
* ,
*
*/
interface State
{
public function handle($state);
public function display();
}
class Context
{
private $_state = null;
public function __construct($state)
{
$this->setState($state);
}
public function setState($state)
{
$this->_state = $state;
}
public function request()
{
$this->_state->display();
$this->_state->handle($this);
}
}
class StateA implements State
{
public function handle($context)
{
$context->setState(new StateB());
}
public function display()
{
echo "state A
";
}
}
class StateB implements State
{
public function handle($context)
{
$context->setState(new StateC());
}
public function display()
{
echo "state B
";
}
}
class StateC implements State
{
public function handle($context)
{
$context->setState(new StateA());
}
public function display()
{
echo "state C
";
}
}
//
$objContext = new Context(new StateB());
$objContext->request();
$objContext->request();
$objContext->request();
$objContext->request();
$objContext->request();

상태 패턴을 이해하는 데 관건은 두 가지가 있다.
1. 보통 명령 모드의 인터페이스에는 방법이 하나밖에 없다.상태 모드의 인터페이스에는 한 가지 또는 여러 가지 방법이 있다.그리고 상태 모델의 실현 유형은 일반적으로 값을 되돌려준다.실례 변수의 값을 바꾸거나즉 상태 패턴은 일반적으로 대상의 상태와 관련이 있다는 것이다.클래스를 실현하는 방법은 서로 다른 기능을 가지고 인터페이스에 덮어쓰는 방법이 있다.상태 모드는 명령 모드와 마찬가지로if...else 등 조건 선택 문장을 제거하는 데도 사용됩니다.
2. 주요 용도는 실례 변수로서 하나의 대상 인용이다.명령 모드의 주요한 사용 방식은 매개 변수 리셋 모드이다.명령 인터페이스는 방법의 매개 변수로 전달된다.그리고 방법 체내에서 이 인터페이스를 리셋한다.상태 모델의 주요 사용 방법은 실례 변수로서 set 속성 방법이나 구조기를 통해 상태 인터페이스의 구체적인 실현 유형의 실례를 전달하는 것이다.따라서 명령 모드와 상태 모드의 공통점과 차이점을 이렇게 비교할 수 있다.
State 모드와command 모드는 모두 매우 자주 사용되고 입도가 비교적 작은 모드로 많은 대형 모드의 일부분이다.기본적으로state모드와command모드는 매우 비슷하다.개발자의 마음속에 단례와 다례에 대한 명확한 인식이 있다면 두 가지 모델로 나누지 않아도 된다.

좋은 웹페이지 즐겨찾기