PHP ではオブザーバー パターンはどのように機能しますか?

WBOY
リリース: 2024-06-03 14:09:02
オリジナル
242 人が閲覧しました

PHP のオブザーバー パターンは、オブザーバーがトピック内の状態の変更をサブスクライブし、それに応答できるようにする設計パターンです。トピックの状態が変化すると、オブザーバーに通知され、オブザーバーはそれに応じて自分自身を更新できます。トピック クラスはオブザーバーのリストを維持し、オブザーバーを接続および削除するメソッドを提供します。トピック クラスは、状態を取得および設定するためのメソッドを提供し、状態が変化したときにオブザーバー通知をトリガーします。オブザーバー クラスは、サブジェクトの状態が変化したときに呼び出される update メソッドを定義します。具象オブザーバー クラスは、独自のロジックを更新するための update メソッドを実装します。実際には、オブザーバーはトピックをサブスクライブし、トピックの状態が変化するとオブザーバーに通知が送られ、オブザーバー自体が更新されます。

PHP ではオブザーバー パターンはどのように機能しますか?

PHP でのオブザーバー パターンの仕組み

はじめに

オブザーバー パターンは、オブジェクト (オブザーバーと呼ばれる) が他のオブジェクト (トピックと呼ばれる) の状態変化をサブスクライブして応答できるようにするソフトウェア設計パターンです。それに。トピックの状態が変化すると、すべてのオブザーバーに通知され、オブザーバーはそれに応じて自分自身を更新できます。

コード構造

PHP では、次のクラス構造を使用してオブザーバー パターンを実装できます:

テーマ クラス:

class Subject
{
    private $observers = [];
    private $state;

    public function attach(Observer $observer)
    {
        $this->observers[] = $observer;
    }

    public function detach(Observer $observer)
    {
        $index = array_search($observer, $this->observers);
        if ($index !== false) {
            unset($this->observers[$index]);
        }
    }

    public function getState()
    {
        return $this->state;
    }

    public function setState($state)
    {
        $this->state = $state;
        $this->notifyObservers();
    }

    private function notifyObservers()
    {
        foreach ($this->observers as $observer) {
            $observer->update($this);
        }
    }
}
ログイン後にコピー

オブザーバー クラス:

interface Observer
{
    public function update(Subject $subject);
}
ログイン後にコピー

具体的なオブザーバー クラス:

りー

実践的なケース

次のコード例を使用して、実際の Observer パターンの適用を説明できます:

class ConcreteObserver1 implements Observer
{
    public function update(Subject $subject)
    {
        // 更新自己的逻辑
    }
}

class ConcreteObserver2 implements Observer
{
    public function update(Subject $subject)
    {
        // 更新自己的逻辑
    }
}
ログイン後にコピー

トピックのステータスが更新されると、それにサブスクライブしているすべてのオブザーバーに通知が届き、それに応じて自分自身も更新されます。

以上がPHP ではオブザーバー パターンはどのように機能しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!