php观察者模式

<?php
/** 
* 3.1php设计模式-观测者模式 
* 3.1.1概念:其实观察者模式这是一种较为容易去理解的一种模式吧,它是一种事件系统,意味 
*     着这一模式允许某个类观察另一个类的状态,当被观察的类状态发生改变的时候, 
*     观察类可以收到通知并且做出相应的动作;观察者模式为您提供了避免组件之间 
*     紧密耦合的另一种方法 
* 3.1.2关键点: 
*    1.被观察者->追加观察者;->一处观察者;->满足条件时通知观察者;->观察条件 
*    2.观察者 ->接受观察方法 
* 3.1.3缺点: 
* 3.1.4观察者模式在PHP中的应用场合:在web开发中观察者应用的方面很多 
*    典型的:用户注册(验证邮件,用户信息激活),购物网站下单时邮件/短信通知等 
*/  
    class BaseEvent {
        private static $list_watch = [];
        public static function add_watch($watch) {
            array_push(static::$list_watch, $watch);
        }
        public static function del_watch($watch) {
            foreach (static::$list_watch as $k=>$v) {
                if ($watch == $v) {
                    unset(static::$list_watch[$k]);
                    return;
                }
            }
        }
        public static function notice_watch($msg) {
            if ($lists = static::$list_watch) {
                foreach ($lists as $watch) {
                    $watch->exec_something($msg);
                }
            }
        }

    }

    interface Observer {
        public function exec_something($msg);
    }

    class Watch1 implements Observer {
        public function exec_something($msg) {
            echo 'watch1'.$msg.PHP_EOL;
        }
    }

    class Watch2 implements Observer{
        public function exec_something($msg) {
            echo 'watch2'.$msg.PHP_EOL;
        }
    }

    class Watch3 implements Observer{
        public function exec_something($msg) {
            echo 'watch3'.$msg.PHP_EOL;
        }
    }

    BaseEvent::add_watch($w1 = new Watch1());
    BaseEvent::add_watch(new Watch2());
    BaseEvent::add_watch(new Watch3());
    BaseEvent::notice_watch('消息来了');
    BaseEvent::del_watch($w1);
    BaseEvent::notice_watch('消息来了');
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值