设计模式-观察者模式(PHP实现)
2016-10-08 22:37
756 查看
一、前言:
说实话,本来我是不太想写关于观察者模式的博客的,一是我前面已经学了好几个设计模式,我都没有写,二是网上的关于设计模式的资源已经处于一个充足的状态。但是!学完之后我想到了之前我的一个噩梦似的经历,促使我必须完成这篇博客:我的噩梦经历:
当时给人家做一个O2O微信商城的项目,就是在处理订单这块,当一个用户购买东西成功了之后,要更新订单表,用户积分表,用户购买记录表,系统结算表。。。。,结果是什么?由于当时自己的水平实在是低到负一层(虽然现在也不咋地吧。。。),结果是将所有的逻辑处理全部写在一个类里面,一旦出现错误,然后在找错误的时候那个凌乱啊。。。。。综合各种情况以及对应的处理,那个类文件有差不多3000行代码!这你敢信?
二、观察者模式实现:
1、观察者模式:当一个对象状态发生变化的时候,依赖他的对象会全部收到通知,并自动更新2、场景:一个事件发生后,要执行一连串更新操作,传统的编程方式,就是在事件的代码之后直接假如处理逻辑。当更新的逻辑增多之后,代码会变得难以维护。这种方式是耦合的,侵入式的,增加新的逻辑需要修改事件主体的代码
3、观察者模式实现了低耦合,非侵入式的通知,与更新机制
废话不多说,直接上代码:
//事件产生者(被观察者) abstract class EventGenerator { //保存众多观察者实例 private $observers = array(); //事件触发 public abstract function trigger(); //添加观察者 function addObserver(Observer $observer) { $this->observers[] = $observer; } //通知观察者 function notify() { foreach ($this->observers as $val) { $val->update(); } } } //观察者接口 interface Observer { function update($event_info = null); } //具体事件 class Event extends EventGenerator { //事件触发 function trigger() { echo "事件发生"; //通知观察者 $this->notify(); } } //观察者1 class Observer1 implements Observer { function update($event_info = null) { echo "观察者1接收到通知并执行更新"; } } //观察者2 class Observer2 implements Observer { function update($event_info = null) { echo "观察者2接收到通知并执行更新"; } } //客户端 class Client { static function Main() { $observer1 = new Observer1(); $observer2 = new Observer2(); $event = new Event(); $event->addObserver($observer1); $event->addObserver($observer2); $event->trigger(); } } Client::Main();
在客户端中,$event->trigger() 事件发生,导致observer1和observer2发生了变化,但是这些逻辑处理不是直接写在trigger()方法里面的,而是在observer1和observer2内部发生的,这样的话代码的维护和分工就变得有序而简单。
一般在一个事件发生触发多事件发生是一个事务处理,在这里我们可以直接在notify() 里面实现就好了:
function notify() { //事务开始: foreach ($this->observers as $val) { $res = $val->update(); if(!$res){ //事务回滚rollback } } //事务提交commit }
好了,终于实现了
相关文章推荐
- PHP设计模式之JS实现观察者模式
- 学习php设计模式 php实现观察者模式(Observer)
- PHP设计模式之观察者模式实现DEMO
- [设计模式]head first 设计模式之PHP实现 第二章 观察者模式
- php实现设计模式之 观察者模式
- 学习php设计模式 php实现观察者模式(Observer)
- PHP 设计模式之观察者模式实现
- 设计模式之观察者(Observer)模式与其C++通用实现(中)
- [设计模式]head first 设计模式之PHP实现 第一章
- php 观察者设计模式
- PHP设计模式实例之(观察者模式、策略模式、简单工厂模式)
- C#设计模式-观察者observer模式实现
- 设计模式之观察者(Observer)模式与其C++通用实现(中)
- PHP设计模式实例之(观察者模式、策略模式、简单工厂模式)
- 【设计模式】用AOP实现观察者模式
- 设计模式-观察者模式实现例子(ruby)
- 开发设计模式 -- Asp.net中实现观察者模式
- 设计模式之观察者模式与其C++通用实现(上)
- [设计模式]head first 设计模式之PHP实现 第一章 练习题代码
- PHP设计模式实例之(观察者模式、策略模式、简单工厂模式)