首页 » Web前端 » php制造消息看点技巧_PHP设计模式之不雅观察者模式

php制造消息看点技巧_PHP设计模式之不雅观察者模式

访客 2024-11-02 0

扫一扫用手机浏览

文章目录 [+]

GoF类图

适配器方法构造类图-继续式

php制造消息看点技巧_PHP设计模式之不雅观察者模式

代码实现

php制造消息看点技巧_PHP设计模式之不雅观察者模式
(图片来自网络侵删)

interfaceObserver{publicfunctionupdate(Subject$subject):void;}

不雅观察者的抽象接口,没啥可说的吧,便是让你实现一个详细的Update就可以了

classConcreteObserverimplementsObserver{private$observerState='';functionupdate(Subject$subject):void{$this->observerState=$subject->getState();echo'实行不雅观察者操作!
当前状态:'.$this->observerState;}}

详细的不雅观察者,实现update()方法,这里我们拿到了Subject类,从而可以得到个中的状态

classSubject{private$observers=[];private$stateNow='';publicfunctionattach(Observer$observer):void{array_push($this->observers,$observer);}publicfunctiondetach(Observer$observer):void{$position=0;foreach($this->observersas$ob){if($ob==$observer){array_splice($this->observers,($position),1);}++$position;}}publicfunctionnotify():void{foreach($this->observersas$ob){$ob->update($this);}}}

Subject父类,掩护一个不雅观察者数组,然后有添加、删除以及循环遍历这个数组的方法,目的是能够方便的管理所有的不雅观察者

classConcreteSubjectextendsSubject{publicfunctionsetState($state){$this->stateNow=$state;$this->notify();}publicfunctiongetState(){return$this->stateNow;}}

Subject的实现类,只是更新了状态,在这个状态发生改变的时候,调用不雅观察者遍历的方法进行所有不雅观察的update()操作

不雅观察者,实在便是自身做了一个更新(update),而Subject,可以批量的实行不雅观察者,请把稳,我们不须要去修正目标类中的任何代码,只须要从外部添加就可以了,以是就让目标和不雅观察者解耦相互之间不用关心对方的情形了不雅观察者可以记录目标的状态,也可以不用记录,比如我们发完短信后的数据库更新或者插入操作,只有短信接口发送成功后我们再修正短信数据的状态就可以了,不一定完备须要将目标的发送状态传送给不雅观察者当一个类在发生改变时,不知道可能会对其他多少类产生影响,这个时候不雅观察者非常有用不雅观察者模式中还是存在着耦合,那便是目标类中有一个不雅观察者工具列表,如果不雅观察者没有实现update()方法,那么就会涌现问题

接着拿我们的手机工厂说事儿,这次好嘛,被一帮山寨机盯上了(不雅观察者),我出什么功能(状态更新),他们就对应的出一样的功能(更新),而且还在我的根本上做了更多的东西,美其名曰:微创新!
你说气人不气人。
好吧,我也派出了一帮市场调查职员(不雅观察者),去帮我不雅观察别人家的手机都出了什么功能(状态更新),然后我们也照搬过来搞点微创新,大家共同进步嘛!

完全代码:https://github.com/zhangyue0503/designpatterns-php/blob/master/06.observer/source/observer.php

实例

这次我们从订单提及,不过还是有短信发送的事儿。
当一样平常的电商平台有人下单之后,须要做的事情非常多,比如修正库存、发送短信或者推送见告商家有人下单了,见告买家下单成功了,支付成功了。
总之便是一件事情的发生会导致各种事宜的产生。
实在,这里就引出了另一个非常出名的模式订阅发布模式。
这个模式可以说是不雅观察者的升级模式,这个系列的文章不会细讲,但是大家可以去看看Laravel中的发布订阅及事宜监听方面的内容。

订单售出类图

订单售出不雅观察者模式

完全源码:https://github.com/zhangyue0503/designpatterns-php/blob/master/06.observer/source/order-observer.php

interfaceObserver{publicfunctionupdate($obj);}classMessageimplementsObserver{//....functionupdate($obj){echo'发送新订单短信('.$obj->mobile.')关照给商家!
';}//....}classGoodsimplementsObserver{//....publicfunctionupdate($obj){echo'修正商品'.$obj->goodsId.'的库存!
';}//....}classOrder{private$observers=[];publicfunctionattach($ob){$this->observers[]=$ob;}publicfunctiondetach($ob){$position=0;foreach($this->observersas$ob){if($ob==$observer){array_splice($this->observers,($position),1);}++$position;}}publicfunctionnotify($obj){foreach($this->observersas$ob){$ob->update($obj);}}publicfunctionsale(){//商品卖掉了//....$obj=newstdClass();$obj->mobile='13888888888';$obj->goodsId='Order11111111';$this->notify($obj);}}$message=newMessage();$goods=newGoods();$order=newOrder();$order->attach($message);$order->attach($goods);//订单卖出了!

$order->sale();

解释

我们没有完备的遵守GoF类图,虽说GoF是圣经,但也并不是我们必须要完备遵守的,我们可以针对详细的业务情形进行得当的裁剪利用订单状态通过sale()方法产生变革后,直接调用notify方法进行不雅观察者的调用发短信、发推送都可以拆开由一个一个的不雅观察者来实现,这些不雅观察者不一定只有这一个方法,但只要实现共同的接口就可以了商品库存和发送实在便是两个本身完备不沾边的类,但它们只须要实现一样的接口就好啦PHP的SPL扩展中已经为我们准备好了一套不雅观察者接口,大家可以试试哦,利用原生支持的不雅观察者模式能省不少事儿呢!

完全源码:https://github.com/zhangyue0503/designpatterns-php/blob/master/06.observer/source/spl_observer.php

下期看点

循环是编程措辞的一个亮点,由于这个能力让编程措辞做出来的软件可以替代人们去做很多重复的劳动。
一说到这里,有的人立时就会想到,莫非我们下次讲的便是迭代器模式?拭目以待吧!

相关文章

房山第一探寻历史文化名区的魅力与发展

房山区,位于北京市西南部,历史悠久,文化底蕴深厚。作为北京市的一个重要组成部分,房山区的发展始终与首都的发展紧密相连。房山区积极推...

Web前端 2025-02-18 阅读1 评论0

手机话费开钻代码数字时代的便捷生活

我们的生活越来越离不开手机。手机话费作为手机使用过程中的重要组成部分,其充值方式也在不断创新。手机话费开钻代码应运而生,为用户提供...

Web前端 2025-02-18 阅读1 评论0

探寻专业奥秘如何查询自己专业的代码

计算机科学已成为当今社会不可或缺的一部分。掌握一门专业代码对于个人发展具有重要意义。面对繁杂的学科体系,如何查询自己专业的代码成为...

Web前端 2025-02-18 阅读1 评论0