オブザーバー パターン
コードをコピー コードは次のとおりです。
interface Subject
{
public function Attach( $Observer ); // オブザーバーを追加します
public function Detach($Observer) // オブザーバーを追い出します
public function Notify(); // 条件が満たされた場合にオブザーバーに通知します
public function SubjectState($Subject ); // 観察条件
}
class Boss 実装 Subject
{
public $_action;
private $_Observer)
{
$this->_Observer[] = $Observer;
}
パブリック関数 Detach($Observer)
{
$ObserverKey = array_search($Observer, $this- >_Observer) ;
if($ObserverKey !== false)
{
unset($this->_Observer[$ObserverKey]);
public function Notify()
{
foreach($this->_Observer as $value )
{
$value->Update();
}
}
public function SubjectState( $Subject)
{
$this->_action = $Subject;
}
}
抽象クラス Observer
{
protected $_UserName; 🎜>protected $ _Sub;
パブリック関数 __construct($Name,$Sub)
{
$this->_UserName = $Name; 🎜>}
public abstract function Update(); //メソッド経由で受信
}
class StockObserver extends Observer
{
public function __construct($name,$sub)
{
parent ::__construct($name,$sub);
}
public function Update()
{
echo $this->_Sub->_action.$this-> ;_UserName." あなたは逃げます...";
}
}
$huhansan = new Boss() // オブザーバー
$gongshil = new StockObserver("三毛",$huhansan) ); // オブザーバーを初期化します
$huhansan->Attach($gongshil) // オブザーバーを追加します
$huhansan->Attach($gongshil); // 同一のオブザーバーを追加します
$huhansan ->Detach($gongshil); //基地内の監視員を追い出す
$huhansan->SubjectState("警察が来ている") //満たされた条件を満たす
$huhansan- > ;Notify(); //すべての有効なオブザーバーを通じて、
はオブザーバー コンテナを継承するクラス (これをオブザーバーと呼びます) として理解できます。Excuse
このインターフェイスのメソッドオブザーバーの追加、オブザーバーのキックアウト、オブザーバーのリマインダー、および観察条件です
オブザーバーの追加は、このコンテナーにクラスを登録することと同じです。もちろん、これらのクラスは、観察されたものに応答するメソッドが必要であることが前提です。
監視されたコンテナは、さまざまな監視条件パラメータを受け入れることによって、このコンテナ内のすべての登録オブザーバに通知する必要があるかどうかを決定します。
一度通知条件が満たされると、コンテナ内のすべてのオブザーバが対応する呼び出しを通知されます。メソッドを作成し、対応するオブザーバー インスタンスへの変更を実装します