热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[PHP]看博客学习观察者模式-陶士涵

[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 observers=new ArrayList();
        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("我在做...");
        }
    }
}


推荐阅读
author-avatar
木色雪魂K
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有