PHP 設計パターン — オブザーバー パターン

WBOY
リリース: 2016-08-08 09:25:34
オリジナル
992 人が閲覧しました

オブザーバー パターン

オブザーバー パターン (オブザーバー) では、オブジェクトの状態が変化すると、それに依存するすべてのオブジェクトが通知を受け取り、自動的に更新されます。

パターンの役割

  • 抽象オブザーバー (抽象クラス、拡張が簡単) は、オブザーバーの追加、オブザーバーのキャンセル、オブザーバーへの通知 (notify) などのいくつかのインターフェイスを提供します
  • 。具象オブザーバー (具象クラス、オブザーバーの抽象クラスを継承) 通知が必要なオブザーバーを格納します。オブザーバーが更新する必要がある場合は、notify メソッドを呼び出します
  • 抽象オブザーバー (インターフェイスまたは抽象クラス) は具象であり、オブザーバーは更新されたオブジェクトを提供します。インターフェースを実装し、オブザーバーから通知を受けて更新します
  • 具象オブザーバー(具象クラス、抽象オブザーバーを継承または実装)は、抽象オブザーバーのインターフェースを実装し、自動的に更新します

phpDemo

抽象オブザーバー

<code><span><?php</span><span>abstract</span><span><span>class</span><span>EventGenerator</span>{</span><span>private</span><span>$observer_arr</span> = <span>array</span>();

    <span>/*
        添加观察者
     */</span><span>public</span><span><span>function</span><span>addObserver</span><span>( Observer <span>$observer</span>)</span>
    {</span><span>$this</span>->observer_arr[] = <span>$observer</span>;
    }

    <span>/*
        通知所有观察者
     */</span><span>public</span><span><span>function</span><span>notify</span><span>()</span>
    {</span><span>foreach</span> (<span>$this</span>->observer_arr <span>as</span><span>$observer</span>) 
        {
            <span>$observer</span>->update();
        }
    }

}
</span></code>
ログイン後にコピー

具象オブザーバー

<code><span><span>class</span><span>Event</span><span>extends</span><span>EventGenerator</span>{</span><span>public</span><span><span>function</span><span>trigger</span><span>()</span>
    {</span><span>echo</span><span>'event happen!<br/>'</span>;
        <span>//当事件发生时,通知所有观察者</span><span>$this</span>->notify();
    }

}
</code>
ログイン後にコピー

抽象オブザーバー

<code><span><?php</span><span><span>interface</span><span>Observer</span>{</span><span>//自动更新</span><span><span>function</span><span>update</span><span>()</span>;</span>
}

</code>
ログイン後にコピー

具体的なオブザーバー

<code><span><span>class</span><span>Observer1</span><span>implements</span><span>Observer</span>{</span><span>//实现update方法</span><span>public</span><span><span>function</span><span>update</span><span>()</span>
    {</span><span>echo</span><span>'observer1 update<br/>'</span>;
    }
}

<span><span>class</span><span>Observer2</span><span>implements</span><span>Observer</span>{</span><span>//实现update方法</span><span>public</span><span><span>function</span><span>update</span><span>()</span>
    {</span><span>echo</span><span>'observer2 update<br/>'</span>;
    }
}

</code>
ログイン後にコピー

テストコード

<code><span>$obj</span> = <span>new</span> Event();
<span>//添加观察者</span><span>$obj</span>->addObserver(<span>new</span> Observer1());
<span>$obj</span>->addObserver(<span>new</span> Observer2());
<span>$obj</span>->trigger();
</code>
ログイン後にコピー

パターンの概要

  • 長所: オブザーバーパターンは低結合、非侵入的な通知と自動更新を実装しますメカニズム
  • 短所:依存関係が完全に排除されておらず、抽象的な通知子まだ抽象オブザーバーに依存しています
  • トライアルシナリオ: 1. オブジェクトの変更により他のオブジェクトの変更が必要になり、変更時に待機しているオブジェクトの数がわからない場合。 2. 抽象型には 2 つの側面がある。他の側面によっては、オブザーバー パターンを使用して 2 つを独立したオブジェクトにカプセル化し、独立して変更および再利用できるようにすることができます。
  • 以上、PHPのデザインパターンの一つであるオブザーバーパターンについて、その側面も含めて紹介しましたが、PHPチュートリアルに興味のある方の参考になれば幸いです。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート