ホームページ >バックエンド開発 >PHPチュートリアル >PHP でトピックベースのパブリッシュ/サブスクライブ パターンを実装する方法

PHP でトピックベースのパブリッシュ/サブスクライブ パターンを実装する方法

PHPz
PHPzオリジナル
2023-07-08 11:09:091430ブラウズ

PHP でトピックベースのパブリッシュ/サブスクライブ パターンを実装する方法

はじめに:
パブリッシュ/サブスクライブ パターン (パブリッシュ/サブスクライブ パターン) は、ソフトウェア設計で一般的に使用されるパターンです。パブリッシャーとサブスクライバー間の関係を解決します。このモードでは、パブリッシャーは複数のサブスクライバーにメッセージをパブリッシュし、サブスクライバーは関心のあるメッセージ トピックにのみ注意を払う必要があるため、疎結合設計が実現されます。この記事では、PHP でトピックベースのパブリッシュ/サブスクライブ モデルを実装する方法を紹介します。

  1. トピック クラスの作成

まず、メッセージのパブリッシュとサブスクリプションを管理するトピック クラスを作成する必要があります。このクラスには次の機能が必要です。

    #購読者のリストを記録する
  • #購読者を登録するためのメソッドを提供する
  • #購読者をキャンセルするためのメソッドを提供する
  • Provide メッセージを公開するメソッドを提供します
  • 次は、単純なトピック クラスの実装です。
  • class Subject {
        private $subscribers = [];
    
        public function subscribe($subscriber) {
            $this->subscribers[] = $subscriber;
        }
    
        public function unsubscribe($subscriber) {
            $key = array_search($subscriber, $this->subscribers);
            if ($key !== false) {
                unset($this->subscribers[$key]);
            }
        }
    
        public function publish($message) {
            foreach ($this->subscribers as $subscriber) {
                $subscriber->handleMessage($message);
            }
        }
    }

サブスクライバー インターフェイスを作成します

  1. 次に、サブスクライバが独自のメッセージ処理メソッドを実装するには、インターフェイスを定義する必要があります。このメソッドは、トピックがメッセージを公開するときに呼び出されます。
  2. interface Subscriber {
        public function handleMessage($message);
    }

特定のサブスクライバ クラスの作成

  1. 次に、特定のサブスクライバ クラスを作成し、サブスクライバ インターフェイスを実装し、必要に応じて独自のメッセージを作成する必要があります。アプローチ。
以下は、単純なサブスクライバ クラスの実装です。

class EmailSubscriber implements Subscriber {
    public function handleMessage($message) {
        echo "邮件订阅者收到消息:$message
";
    }
}

class SmsSubscriber implements Subscriber {
    public function handleMessage($message) {
        echo "短信订阅者收到消息:$message
";
    }
}

パブリッシュ/サブスクライブ モデルの使用

  1. これで、パブリッシュ-サブスクライブ モデルを使用できるようになります。サブスクライブ モデル メッセージのパブリッシュとサブスクリプションを実装します。まずトピック オブジェクトを作成し、次にサブスクライバ オブジェクトを作成してトピックに登録します。最後に、トピック オブジェクトを通じてメッセージを公開します。
次は使用例です:

// 创建主题对象
$subject = new Subject();

// 创建订阅者对象
$emailSubscriber = new EmailSubscriber();
$smsSubscriber = new SmsSubscriber();

// 注册订阅者到主题对象
$subject->subscribe($emailSubscriber);
$subject->subscribe($smsSubscriber);

// 发布消息
$subject->publish("新消息");

// 取消订阅
$subject->unsubscribe($emailSubscriber);

// 再次发布消息
$subject->publish("另一条消息");

上記のコードを実行すると、次の出力が表示されます:

邮件订阅者收到消息:新消息
短信订阅者收到消息:新消息
短信订阅者收到消息:另一条消息

概要:

上記の手順により、トピックベースのパブリッシュ/サブスクライブ モデルの実装に成功しました。この設計パターンにより、発行者と購読者の関係が切り離され、新しい購読者の拡大が容易になります。実際のプロジェクトでは、必要に応じてサブスクライバとトピックを追加して、より豊富なメッセージ発行およびサブスクリプション機能を実現できます。

以上がPHP でトピックベースのパブリッシュ/サブスクライブ パターンを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。