update()
옵저버 모드 attach()
setState()
Publisher notify()라고합니다. 의존성 객체를 또는 옵저버 카테고리
관찰자 클래스는 주제가 상태 변경을 알리기 위해 호출 할 수있는 방법을 제공합니다. 이 예에서는 메소드를 특정 방법으로 정의했습니다. 원한다면 여기에서 방법을 추상적 인 방법으로 정의한 다음 관찰자의 서브 클래스에서 구체적인 구현을 제공 할 수 있습니다. update()
update()
방법은 관찰 가능한 주제의 인스턴스를 받아들이고 주제에 첨부됩니다. 나중에 그것에 대해 이야기 할 것입니다.
<code class="language-php"><?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)); } } }</code>테마 카테고리
주제 클래스는 또한 추상 클래스이며, 이는 , , , __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()
<code class="language-php"><?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)); } } }</code>
및 login()
메소드에 의해 트리거 된 모든 상태 변경은 Auth_forumhook Observer에 알리고 포럼에서 사용자에게 자동으로 로그인하거나 로그 아웃합니다. 예를 들어 새 관찰자를 추가하려면 추적기에 로그인하여 사용자가 포털에서 로그인하거나 포털에서 로그 아웃 할 때 녹음하여 기존 인증 객체의 및 logout()
메소드를 추가로 수정하지 않고 특정 관찰자 클래스를 제공하고 인증 주제에 첨부하십시오. login()
요약 logout()
JPF / ShutterStock의 사진 사진
(기사의 길이로 인해 후속 FAQ 섹션이 생략되었습니다. 핵심 내용이 재구성되고 연마되었습니다.)
위 내용은 관찰자 패턴 이해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!