这篇文章给大家介绍如何在PHP项目中应用观察者模式,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
一、首先得有两个接口类,用以框定观察者模式,
一个被观察者接口类(一般申明有三个必须方法:1.添加观察者对象的方法,2.删除观察者对象的方法 ,3.通知观察者进行 相应执行的方法),
一个观察者接口类(一般只有一个必须方法,就是执行)
如果直接甩代码可能有点难理解,那么就先给个示意图来明确一下吧!
二、根据观察者接口类的框定我们定下接口类如下代码:
(示例是网上抄的,因为易于理解,申明一下出处,网址:https://www.jb51.net/article/170753.htm):
<?php
// 被观察者接口
interface Subject{
public function register(Observer $observer); //添加(注册)观察者对象
public function detach(Observer $observer); //删除观察者对象
public function notify(); //通知观察者执行相应功能
}
// 观察者接口
interface Observer{
public function watch(); //观察者要执行的方法
}
三、根据框定的结构,大概的理解一下就是,要实现 被观察者对象 存储各种观察者对象(完成各种功能的对象)存储起来,然后通只各观察者执行自己的功能,先看看如下的实现代码
<?php
// 被观察者继承类
class Action implements Subject{
public $_observers=array(); //用于存储观察者对象
//用于添加(注册)观察者对象
public function register(Observer $observer){
$this->_observers[]=$observer;
}
//用于删除观察者对象
public function detach(Observer $observer){
$index = array_search($observer, $this->_observers);
if ($index === FALSE || ! array_key_exists($index, $this->_observers)) {
return FALSE;
}
unset($this->_observers[$index]);
return TRUE;
}
//通知各观察者
public function notify(){
//****重点,其实就是循环中执行各观察这对象的watch方法,不同功能方法内容不同但方法名相同
foreach ($this->_observers as $observer) {
$observer->watch();
}
}
}
// cat观察者继承类
class Cat implements Observer{
public function watch(){
echo "Cat watches TV<hr/>";
}
}
//dog观察者继承类
class Dog implements Observer{
public function watch(){
echo "Dog watches TV<hr/>";
}
}
//people观察者继承类
class People implements Observer{
public function watch(){
echo "People watches TV<hr/>";
}
}
好了,我们现在通过上面的继承就能明白了,观察者就是定义各种功能的对象(这些对象就是:比如给第一次登录的用户发红包,给用户最新的10条文章推送,给非vip用户推送10条需要注册才能打开的视频诱导用户开通vip。。。。),被观察者对象要实现的就是 将添加(注册)的观察者对象存储起来并逐个通知执行观察者各自的功能,
四、那么就进行实例化对象进行操作了!代码如下:
// 应用实例
$action=new Action();
$action->register(new Cat());
$action->register(new People());
$action->register(new Dog());
$action->notify();
关于如何在PHP项目中应用观察者模式就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。