PHP模式之观察者模式

<?php
//观察这模式
interface Isubject{
    function AddObserver(Observer $obj);
    function RemoveObserver(Observer $obj);
    function notifyObservers();
}

interface Observer{
    function update(Isubject $s);
}

class Subject implements Isubject{
    private $arr = array();
    private $id = 1;
    private $title = '标题';
    private $content = '网站内容HI';
    
    function AddObserver(Observer $obj) {
        array_push($this->arr, $obj);
    }
    
    function RemoveObserver(Observer $obj){
        $keys = array_search($obj, $this->arr);
        unset($this->arr[$keys]);
    }
    
    
    function notifyOvservers(){
        foreach($this->arr as $val){
            $val->update($this);
        }
    }
    
    function __set($name, $val) {
        $this->$name = $val;
        $this->notifyObservers();
    }
    
    function __get($name) {
        return $this->$name;
    }
}

class ObserverA implements Observer{
    function update(Isubject $s){
        echo "<h1> $s->title </h1><hr>";
    }
}

class ObserverB implements Observer{
    function update(Isubject $s){
        echo "<h1> $s->title </h1><p>$s->content</p><hr>";
    }
}

$a = new ObserverA();
$b = new ObserverB();
$s = new Subject();
$s->AddObserver($a);
$s->AddObserver($b);
//出现数据变动后,触发通知
$s->title = '我们的大中国';

观察者模式:给某一个事件(主题)添加观察者,当触发这个事件的某个方法时,或许改变了这个事件的某些属性啥的,并且改变之后还需要通知观察这个事件的人(观察者)。
这篇博文解释的还不错:https://blog.csdn.net/zhang_referee/article/details/82729540

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值