观察者模式主要用于解耦
1 没有观察者模式
class order { public function addOrder() { // 发短信 Message::update(); //发邮件 Email::update(); //记日志 Log::update(); } } $order = new order(); $order->addOrder();
2 观察者模式
2.1 被观察者 order
//被观察者 interface Observable { //添加观察者实例 function add(); //删除观察者实例 function del(); //通知观察者 function notify(); } //订单类继承被观察者接口 class order implements Observable { private $instance = array(); //添加观察者实例 function add(observe $observe) { // Todo: Implement add() method. $key = array_search($observe,$this->instance); if ($key === false){ $this->instance[] = $observe; } } //删除观察者实例 function del(observe $observe) { // Todo: Implement del() method. $key = array_search($observe,$this->instance); if ($key !== false){ unset($this->instance[$key]); } } //通知观察者实例 function notify() { // Todo: Implement notify() method. foreach ($this->instance as $key => $val){ //调用实例化对象的update方法 $val->update(); } } }
2.2 观察者 Email 、Message
/** * Interface observe * 定义一个观察者 */ interface observe() { //每个实例化对象都有update方法 function update(); } class Email implements observe { function update() { echo "订单修改了,发送邮件"; } } class Message implements observe { function update() { echo "订单修改了,发送短信"; } }
2.3 客户端调用
$order = new order(); $order->add(new Email()); $order->add(new Message()); $order->del(new Email()); $order->notify();
3 Laravel的事件机制
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。