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

 

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/12611.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论