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.
本文原创发布php中文网,转载请注明出处,感谢您的尊重!