관찰자 패턴
코드 복사 코드는 다음과 같습니다.
인터페이스 주제
{
공용 함수 첨부( $Observer ); //관찰자 추가
public function Detach($Observer); //관찰자 추방
public function Notify() //조건이 충족되면 관찰자에게 알림
public function SubjectState($Subject ); //관찰 조건
}
class Boss 구현 주제
{
public $_action;
private $_Observer
public function Attach($Observer)
{
$this->_Observer[] = $Observer;
}
공용 함수 Detach($Observer)
{
$ObserverKey = array_search($Observer, $this- >_Observer) ;
if($ObserverKey !== false)
{
unset($this->_Observer[$ObserverKey])
}
}
공개 function Notify()
{
foreach($this->_Observer as $value )
{
$value->Update()
}
}
공개 함수 SubjectState( $Subject)
{
$this->_action = $Subject
}
}
추상 클래스 관찰자
{
protected $_UserName; 🎜>보호된 $ _Sub;
공용 함수 __construct($Name,$Sub)
{
$this->_UserName = $Name; 🎜>}
공용 추상 함수 Update(); //메소드를 통해 수신
}
class StockObserver는 Observer를 확장합니다
{
공용 함수 __construct($name,$sub)
{
parent ::__construct($name,$sub);
}
공용 함수 Update()
{
echo $this->_Sub->_action.$this-> ;_UserName." 도망가세요...";
}
}
$huhansan = new Boss(); // Observer
$gongshil = new StockObserver("三毛",$huhansan ); //옵저버 초기화
$huhansan->Attach($gongshil); //옵저버 추가
$huhansan->Attach($gongshil); //동일한 옵저버 추가
$huhansan ->Detach($gongshil); //기지에 있는 관찰자를 쫓아냅니다
$huhansan->SubjectState("경찰이 옵니다") //충족된 조건 충족
$huhansan- > ;Notify(); //모든 유효한 관찰자
는 관찰자 컨테이너를 상속하는 클래스(우리는 그것을 관찰자라고 부릅니다)로 대략적으로 이해할 수 있습니다. Excuse
이 인터페이스의 메소드는 다음과 같습니다. : 관찰자 추가, 관찰자 추방, 관찰자 알림 및 관찰 조건