PHP-观察者模式
什么是观察者模式
当一个对象状态发送改变时,依赖它的对象全部会受到通知,并自动更新。观察者模式实现了低耦合的通知机制。
可用于通知或更新操作,进行解耦,避免在原来代码上修改逻辑代码。
观察者模式场景
一个事件发生后,要执行一连串更新操作。传统的方式就是在事件的代码后加入处理逻辑,当更新的逻辑增多之后,代码会变得难以维护。这种方式是耦合的,增加新的逻辑或删除旧的逻辑需要修改事件的主体代码。
观察者模式的实现
<?php
/**
* 事件生成器
* Class EventGenerator
*/
abstract class EventGenerator
{
private $observes = [];// 观察者数组
/**
* 添加观察者
* @param Observe $observe
*/
public function addObserve(Observe $observe)
{
$this->observes[] = $observe;
}
/**
* 通知
*/
public function notify()
{
foreach ($this->observes as $observe) {
$observe->update();
}
}
}
/**
* 观察者接口
* Interface Observe
*/
interface Observe
{
public function update();
}
/**
* 事件
* Class User
*/
class User extends EventGenerator
{
/**
* 发送通知
*/
public function send()
{
echo '给用户发送通知...';
$this->notify();
echo '发送成功!';
}
}
/**
* 邮件观察者
* Class EmailObserve
*/
class EmailObserve implements Observe
{
public function update()
{
// TODO: Implement update() method.
echo '发送邮件...';
// 邮件发送逻辑...
echo '邮件发送成功...';
}
}
/**
* 短信观察者
* Class SMSObserve
*/
class SMSObserve implements Observe
{
public function update()
{
// TODO: Implement update() method.
echo '发送短信...';
// 短信发送逻辑...
echo '短信发送成功...';
}
}
$user = new User();
// 添加观察者
$user->addObserve(new EmailObserve());
$user->addObserve(new SMSObserve());
// 发送
$user->send();
运行结果:
E:\php_project\设计模式\Lemon_lyue>php Observe.php
给用户发送通知...发送邮件...邮件发送成功...发送短信...短信发送成功...发送成功!
更多内容关注个人博客:lemonlyue.github.io/
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: