Lynda 假设有一个系统服务,有几个模块需要使用服务,组件可以订阅这个服务或消息,通过系统广播通知所有的模块。 无 ?php// 订阅发布模式 接口的定义及消息的传递class Dispatcher{ // 监视public static $listeners = array();protected function __constru
Lynda
假设有一个系统服务,有几个模块需要使用服务,组件可以订阅这个服务或消息,通过系统广播通知所有的模块。
<?php // 订阅发布模式 接口的定义及消息的传递 class Dispatcher { // 监视 public static $listeners = array(); protected function __construct(){} // 订阅服务 public static function subscribe($object, $subscribe) { $id = spl_object_hash($object); self::$listeners[$id][] = $subscribe; } // 广播消息 public static function publish($object) { $id = spl_object_hash($object); foreach (self::$listeners[$id] as $subscriber) { //var_dump($subscriber); $subscriber->doSomething(); } } } class Service { protected $name = ''; public function __construct($name) { $this->name = $name; } // 触发动作 public function doSomething() { echo sprintf("%s has something happened.\n", $this->name); Dispatcher::publish($this); } } class Component { protected $name = ''; public function __construct($name) { $this->name = $name; } public function doSomething() { echo sprintf("%s did something.\n", $this->name); } } $serviceA = new Service("ServiceA"); $componentA = new Component("componentA"); $componentB = new Component("componentB"); $componentC = new Component("componentC"); Dispatcher::subscribe($serviceA, $componentA); Dispatcher::subscribe($serviceA, $componentB); Dispatcher::subscribe($serviceA, $componentC); // 触发一个动作 $serviceA->doSomething(); // output //ServiceA something happened. //componentA did something. //componentB did something. //componentC did something.
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事
R.E.P.O.説明されたエネルギー結晶と彼らが何をするか(黄色のクリスタル)
3週間前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最高のグラフィック設定
3週間前By尊渡假赌尊渡假赌尊渡假赌
アサシンのクリードシャドウズ:シーシェルリドルソリューション
2週間前ByDDD
R.E.P.O.誰も聞こえない場合はオーディオを修正する方法
3週間前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:Myriseのすべてのロックを解除する方法
3週間前By尊渡假赌尊渡假赌尊渡假赌

ホットツール

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

WebStorm Mac版
便利なJavaScript開発ツール

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター
