设计模式-观察者模式(observer)
1、概念:观察者模式又叫发布-订阅(Publish/Subscribe)模式。只要被观察者作出了响应的改变,观察者们就会有相应的动作
2、特点:
1)对一个对象状态的更新,需要其他对象同步更新,而且其他对象的数量动态可变
2)对象仅需要将自己的更新通知给其他对象而不需要知道其他对象的细节
3、场景:
1)订单支付成功后,会做各种动作,比如发送EMAIL,或者改变订单状态,发送短信给客户,修改优惠券,通知仓库订单号等等
2)网站登录之后,修改登录时间,推送最新活动,让附近的人给他打招呼
4、PHP官方提供的实现方式
php提供的两个接口,一个被观察者接口SplSubject,一个或多个观察者接口SplObserver,和一个可以储存对象的类SplObjectStorage。
1)被观察者接口SplSubject有三个方法,需要实现这三个方法,一个attach可以理解为添加一个观察者,detach可以理解为删除掉一个观察者,notify里面,循环执行观察者的update方法(被观察者被存储在splobjectstorage类里面),update方法把本类作为参数传进去。
2)观察者接口SplObserver中的update()方法对于观察者模式至关重要,因为它会得到Subject状态的最新变化,并交给观察者实例。
3)SplObjectStorage类与观察者设计模式没有内在的关系,不过通过它可以很方便地将观察者实例与一个主题实例相关联以及解除关联。
SplObjectStorage对象用来存储观察者对象,这样就省去了底层数组的很多操作细节,比如in_array判断观察者对象是否已经存在了,这是一种委托设计模式。
4)demo代码如下:
Aticle.php
主题(被观察者)
观察者
测试结果:
参考链接:https://segmentfault.com/a/1190000008803247