zoukankan      html  css  js  c++  java
  • [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("我在做...");
            }
        }
    }
  • 相关阅读:
    《基于UML的电子病案管理系统的设计》文献阅读随笔
    《暗时间》读书笔记
    《基于物联网技术的无纸化电子病案管理系统设计与应用》文献阅读随笔
    文献随笔目录
    C语言程序设计第一次作业
    python基础 day24 面向对象——封装
    python基础 day23 面向对象相关
    python基础 day22 面向对象初识
    python基础 day21 re模块及shutil、logging模块
    python基础 day20 正则表达式及re模块及装饰器
  • 原文地址:https://www.cnblogs.com/taoshihan/p/5439539.html
Copyright © 2011-2022 走看看