简单的订阅者模式
程序员文章站
2024-02-15 15:36:34
...
Lynda 假设有一个系统服务,有几个模块需要使用服务,组件可以订阅这个服务或消息,通过系统广播通知所有的模块。 无 ?php// 订阅发布模式 接口的定义及消息的传递class Dispatcher{ // 监视public static $listeners = array();protected function __constru
Lynda
假设有一个系统服务,有几个模块需要使用服务,组件可以订阅这个服务或消息,通过系统广播通知所有的模块。
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.