[PHP] 看博客学习观察者模式
2023-02-18 15:46:56 时间
具体应用场景是,当subject的某个动作需要引发一系列不同对象的动作(比如你是一个班长要去通知班里的某些人),与其一个一个的手动调用触发的方法(私下里一个一个通知),不如维护一个列表(建一个群),这个列表存有你想要调用的对象方法(想要通知的人);之后每次做的触发的时候只要轮询这个列表就好了(群发),而不用关心这个列表里有谁,只用关心想让谁加入让谁退出
PHP版:
//这个是主题 class Paper{ private $_observers=array(); public function register($obj){ $this->_observers[]=$obj; } public function start(){ if(!empty($this->_observers)){ foreach($this->_observers as $observer){ $observer->todo(); } } } } //这个是观察者 class observer{ public function todo(){ echo "我在做..."; } } $paper=new Paper(); $paper->register(new observer()); $paper->register(new observer()); $paper->start();
javascript版:
//这是主题 function Paper(){ this.observers=[]; this.register=function(obj){ this.observers.push(obj); } this.start=function(){ for(var i=0;i<this.observers.length;i++){ this.observers[i].todo(); } } } //这是观察者 function Observer(){ this.todo=function(){ console.log("我在做..."); } } var paper=new Paper(); paper.register(new Observer()); paper.register(new Observer()); paper.start();
java版:
package com.tsh.mthread; import java.util.ArrayList; import java.util.List; public class Home { public static void main(String[] args) { Paper paper=new Paper(); paper.register(new Observer()); paper.register(new Observer()); paper.start(); } //这是主题 private static class Paper{ private List<Observer> observers=new ArrayList<Observer>(); public void register(Observer observer){ observers.add(observer); } public void start(){ if(observers.size()!=0){ for(Observer observer:observers){ observer.todo(); } } } } //这是观察者 private static class Observer{ public void todo(){ System.out.println("我在做..."); } } }
相关文章
- oracle学习笔记(六) JDBC使用
- 渗透攻防Web篇-深入浅出SQL注入
- oracle学习笔记(五) SQL操作符
- 不容错过!什么是领域驱动设计?为什么落地这么难?
- oracle学习笔记(四) DML数据控制语言和TCL 事务控制语言
- Docker与虚拟化技术浅析第一弹之docker与Kubernetes
- oracle学习笔记(三) DCL 数据控制语言与 DDL 数据定义语言
- Mysql和Redis数据如何保持一致
- oracle学习笔记(二) 基本数据类型
- oracle学习笔记(一) oracle 体系结构简单介绍以及创建表空间和用户
- RedisSyncer同步引擎的设计与实现
- 杂牌机搞机之旅(二)————移植TWRP第三方Recovery并刷入
- 一次客户需求引发的K8S网络探究
- 一次minerd肉鸡木马的排查思路
- 从一条更新SQL的执行过程窥探InnoDB之REDOLOG
- MySql主从同步介绍
- 业务数据迁移上云的一些技术思考
- 水滴低代码搭建——6倍提效,新品首发素材审核系统实践之路
- MYSQL最朴素的监控方式
- 基于SPI的增强式插件框架设计