update()
옵저버 모드 attach()
setState()
Publisher notify()라고합니다. 의존성 객체를 또는 옵저버 카테고리
관찰자 클래스는 주제가 상태 변경을 알리기 위해 호출 할 수있는 방법을 제공합니다. 이 예에서는 메소드를 특정 방법으로 정의했습니다. 원한다면 여기에서 방법을 추상적 인 방법으로 정의한 다음 관찰자의 서브 클래스에서 구체적인 구현을 제공 할 수 있습니다. update()
update()
방법은 관찰 가능한 주제의 인스턴스를 받아들이고 주제에 첨부됩니다. 나중에 그것에 대해 이야기 할 것입니다.
<?php abstract class Observer { public function __construct($subject = null) { if (is_object($subject) && $subject instanceof Subject) { $subject->attach($this); } } public function update($subject) { // 查找具有状态名称的观察者方法 if (method_exists($this, $subject->getState())) { call_user_func_array(array($this, $subject->getState()), array($subject)); } } }
<🎜 🎜>
주제 클래스는 또한 추상 클래스이며, 이는 <🎜 🎜>, <🎜 🎜>, <🎜 🎜>, <🎜 🎜 <🎜 __construct()
의 네 가지 주요 방법을 정의하는 추상 클래스입니다. 편의를 위해 여기에 update()
및
<🎜 🎜> <<> 메소드는 주정부 변경을 통신 할 수 있도록 관찰자를 주제에 가입합니다. 메소드는 주제의 상태 변경을 더 이상 관찰하지 않도록 주제에서 관찰자를 수신 해제합니다.
메소드는 주제의 현재 상태를 설정하고를 호출하여 관찰자를 업데이트하여 각 관찰자에게 알림을 발행합니다. 내부 목록을 반복하고 각 멤버의 attach()
메소드를 차례로 호출하여 각 구독 한 객체를 업데이트합니다. <🎜 🎜> 및 detach()
메소드는 현재 주제와 관찰자 목록의 상태를 반환하는 도우미 함수입니다. setState()
<🎜 🎜> <<> 조심스럽게 추가 ... 함께 통합 <🎜 notify()
getState()
getObservers()
<?php abstract class Subject { protected $observers; protected $state; public function __construct() { $this->observers = array(); $this->state = null; } public function attach(Observer $observer) { $i = array_search($observer, $this->observers); if ($i === false) { $this->observers[] = $observer; } } public function detach(Observer $observer) { if (!empty($this->observers)) { $i = array_search($observer, $this->observers); if ($i !== false) { unset($this->observers[$i]); } } } public function getState() { return $this->state; } public function setState($state) { $this->state = $state; $this->notify(); } public function notify() { if (!empty($this->observers)) { foreach ($this->observers as $observer) { $observer->update($this); } } } public function getObservers() { return $this->observers; } }
포털의 인증 클래스가 인스턴스화되는 코드베이스의 다른 사람들은 auth_forumhook 인스턴스를 첨부하여 관찰자에게 인증의 상태 변경 사항을 알릴 수 있도록합니다. <code>attach()
<?php abstract class Observer { public function __construct($subject = null) { if (is_object($subject) && $subject instanceof Subject) { $subject->attach($this); } } public function update($subject) { // 查找具有状态名称的观察者方法 if (method_exists($this, $subject->getState())) { call_user_func_array(array($this, $subject->getState()), array($subject)); } } }
및 login()
메소드에 의해 트리거 된 모든 상태 변경은 Auth_forumhook Observer에 알리고 포럼에서 사용자에게 자동으로 로그인하거나 로그 아웃합니다. 예를 들어 새 관찰자를 추가하려면 추적기에 로그인하여 사용자가 포털에서 로그인하거나 포털에서 로그 아웃 할 때 녹음하여 기존 인증 객체의 및 logout()
메소드를 추가로 수정하지 않고 특정 관찰자 클래스를 제공하고 인증 주제에 첨부하십시오. login()
요약 logout()
JPF / ShutterStock의 사진 사진
(기사의 길이로 인해 후속 FAQ 섹션이 생략되었습니다. 핵심 내용이 재구성되고 연마되었습니다.)
위 내용은 관찰자 패턴 이해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!