分享web开发知识

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

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

PHP设计模式之----观察者模式

发布时间:2023-09-06 02:27责任编辑:郭大石关键词:PHP

一、概述

1、观察者模式(Observer),当一个对象的状态发生改变时,依赖他的对象会全部收到通知,并自动更新。

2、场景:一个事件发生后,要执行一连串更新操作.传统的编程方式,就是在事件的代码之后直接加入处理逻辑,当更新得逻辑增多之后,代码会变得难以维护.这种方式是耦合的,侵入式的,增加新的逻辑需要改变事件主题的代码。
观察者模式实现了低耦合,非侵入式的通知与更新机制。

3、观察者模式包含的角色:
???  ①Subject: 目标

  ②Observer: 观察者

  ③ConcreteSubject: 具体目标

  ④ConcreteObserver: 具体观察者

二、代码实现

1)抽象观察目标

/* * 抽象观察目标,定义观察目标要实现的方法 * */abstract class Subject{ ???//定义数组存储观察目标 ???protected $observers = array(); ???//添加观察者 ???abstract public function addObserver(Observer $observer); ???//删除观察者 ???abstract public function delObserver(Observer $observer); ???//满足条件时通知所有观察者的操作 ???abstract public function notify(); ???//发起通知的条件 ???abstract public function condition($num);}

2)观察者接口

/** * 观察者接口,定义所有观察者共同具有的操作——执行修改 */interface Observer{ ???function update();}

3)具体观察目标

/* * 具体观察目标 */class ConcreteSubject extends Subject{ ???//添加观察者 ???public function addObserver(Observer $observer) ???{ ???????$this->observers[] = $observer; ???} ???//移除观察者 ???public function delObserver(Observer $observer) ???{ ???????$key = array_search($observer, $this->observers); ???????if ($key !== false) { ?//注意不要写成!=,表达式0!=flase为flase ???????????unset($this->observers[$key]); ???????} ???} ???//通知所有观察者去操作 ???public function notify() ???{ ???????foreach ($this->observers as $key => $value) { ???????????$value->update(); ???????} ???} ???//发起通知的条件 ???public function condition($num) ???{ ???????if ($num > 100) { ???????????$this->notify(); ???????} ???}}

4)具体观察者

/* * 具体观察者:观察者A * */class ConcreteObserverA implements Observer{ ???function update() ???{ ???????echo "A报告:敌军超过一百人了,快撤!<br>"; ???} ???//其他函数 ???function eat() ???{ ???????echo "A在吃饭"; ???}}/* * 具体观察者:观察者B * */class ConcreteObserverB implements Observer{ ???function update() ???{ ???????echo "B报告:敌军超过一百人了,快撤!<br>"; ???} ???//其他函数 ???function sleep() ???{ ???????echo "B在睡觉"; ???}}

5)测试

//测试$a ??????= new ConcreteObserverA();$b ??????= new ConcreteObserverB();$subject = new ConcreteSubject();$subject->addObserver($a);$subject->addObserver($b);$subject->condition(1000);

PHP设计模式之----观察者模式

原文地址:https://www.cnblogs.com/jxl1996/p/10185267.html

知识推荐

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