分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 软件开发

设计模式之观察者模式(php实现)

发布时间:2023-09-06 01:59责任编辑:董明明关键词:暂无标签
github地址:https://github.com/ZQCard/design_pattern
/** * 当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。 * 比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。 * 一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知,进行广播通知。 */

(1) Subject.class.php(目标类)

<?phpnamespace Observer;class Subject{ ???private $state; ???private $observers = []; ???public function getState() ???{ ???????return $this->state; ???} ???public function seState($state) ???{ ???????$this->state = $state; ???????$this->notifyAllObjects(); ???} ???public function register(Observer $object) ???{ ???????$this->observers[] = $object; ???} ???public function remove($object) ???{ ???????foreach ($this->observers as $key => $observer) { ???????????if ($observer == $object){ ???????????????unset($this->observers[$key]); ???????????} ???????} ???} ???public function notifyAllObjects() ???{ ???????foreach ($this->observers as $observer) { ???????????$observer->update(); ???????} ???}}

(2)Observer.class.php(观察者抽象父类)

<?phpnamespace Observer;abstract class Observer{ ???protected $subject; ???public abstract function update();}

(3)ObjectA.class.php (具体抽象类A)

<?phpnamespace Observer;class ObserverA extends Observer{ ???private $myState = ‘init A‘; ???public function __construct(Subject $subject) ???{ ???????$this->subject = $subject; ???????$this->subject->register($this); ???} ???public function update() ???{ ???????$this->myState = $this->subject->getState(); ???} ???public function getSate() ???{ ???????return "ObserverA get state:".$this->myState; ???}}

(4)ObserverB.class.php(具体观察者B)

<?phpnamespace Observer;class ObserverB extends Observer{ ???private $myState = ‘init B‘; ???public function __construct(Subject $subject) ???{ ???????$this->subject = $subject; ???????$this->subject->register($this); ???} ???public function update() ???{ ???????$this->myState = $this->subject->getState(); ???} ???public function getSate() ???{ ???????return "ObserverB get state:".$this->myState; ???}}

(5)observer.php

<?phpspl_autoload_register(function ($className){ ???$className = str_replace(‘\\‘,‘/‘,$className); ???include $className.".class.php";});use Observer\ObserverA;use Observer\ObserverB;use Observer\Subject;/*
ObserverA get state:init A
ObserverB get state:init B
ObserverA get state:hello
ObserverB get state:hello
*/
$subject = new Subject(); $objectA = new ObserverA($subject); $objectB = new ObserverB($subject); echo $objectA->getSate(); echo ‘<br/>‘; echo $objectB->getSate(); echo ‘<br/>‘; $subject->seState("hello"); echo $objectA->getSate(); echo ‘<br/>‘; echo $objectB->getSate(); echo ‘<br/>‘;

设计模式之观察者模式(php实现)

原文地址:https://www.cnblogs.com/zhouqi666/p/9164450.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved