[PHP] 看博客学习观察者模式
具体应用场景是,当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("我在做..."); } } }
十年开发经验程序员,离职全心创业中,历时三年开发出的产品《唯一客服系统》
一款基于Golang+Vue开发的在线客服系统,软件著作权编号:2021SR1462600。一套可私有化部署的网站在线客服系统,编译后的二进制文件可直接使用无需搭开发环境,下载zip解压即可,仅依赖MySQL数据库,是一个开箱即用的全渠道在线客服系统,致力于帮助广大开发者/公司快速部署整合私有化客服功能。
开源地址:唯一客服(开源学习版)
官网地址:唯一客服官网