オブザーバーのパターン
コードをコピーします コードは次のとおりです:
interface Subject
{
public function Attach($Observer) //オブザーバーを追加します
public function Detach($Observer);オブザーバー
public function Notify(); //条件が満たされた場合にオブザーバーに通知します
public function SubjectState($Subject) //条件を監視します
}
class Boss は Subject を実装します
{
public $_action; _Observer;
パブリック関数 Attach($Observer)
{
$this->_Observer[] = $Observer;
}
パブリック関数 Detach($Observer)
{
$ObserverKey = array_search($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;
}
abstract クラスオブザーバー
{
protected $_UserName;
public function __construct($Name,$Sub)
{
$this->_Sub = $Sub;
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(); //すべての有効なオブザーバー
は、オブザーバー コンテナを継承するクラス (オブザーバーと呼びます) として大まかに理解できます。キックアウトオブザーバー、リマインドオブザーバー、および観察条件
オブザーバーの追加は、このコンテナーにいくつかのクラスを登録することと同じです。もちろん、これらのクラスにはオブザーバーの応答情報に応答するためのメソッドが必要です
。オブザーバー コンテナーは、さまざまな観察条件パラメーターを受け入れることによって、コンテナー内のすべての登録済みオブザーバーにリマインドする必要があるかどうかを決定します。
リマインダー条件が満たされると、オブザーバーは、対応するメソッドの呼び出しを許可します。対応するオブザーバー インスタンスに変更を実装します
今のところはこれですべてです。