zoukankan      html  css  js  c++  java
  • 设计模式之观察者模式

    先上代码:

    <?php
    function buy($user)
    {
        echo "buy success
    ";
        return true;
    }
    
    class User
    {
        private $_observers = array();
     
        public function register($sub)
        { /*  注册观察者 */
            $this->_observers[] = $sub;
        }
    
        public function trigger()
        {  /*  外部统一访问    */
            if(!empty($this->_observers)){
                foreach($this->_observers as $observer){
                    $observer->update();
                }
            }
        }
    }
     
    /**
     * 观察者要实现的接口
     */
    interface Observerable{
        public function update();
    }
     
    class Sms implements Observerable{
        public function update(){
            echo "Sms notify
    ";
        }
    }
    
    class Email implements Observerable {
        public function update() {
            echo 'Email notify';
        }
    }
    
    
    $u = new User();
    $u->register(new Sms());
    $u->register(new Email());
    if (buy($u)) {
        $u->trigger();
    }
    

      如果不把那两个sms和Email这连个类放进user中的话,如果sms不需要了。或者需要修改的话,那么就需要修改一些核心类user内的内容。因为Email和sms属于不同的功能,在不同的场合可能user中需要不同的类(sms或者是Email),如果写两个这样的user类的话,就太冗余了。这种模式中user类中的register方法,就好像一个入口,需要哪一种具体的方法(sms或者Email)时,只需要用这个方法,把不同的对象加入到user对象内就可以了,然后用这些加入进去的对象(sms或者Email)调用他们相关的方法

  • 相关阅读:
    哥java学识有大进 干回之前的小学生系统像切菜一样简单 不说了 来代码
    祝贺自己操作系统JAVA项目有进展!!
    四则运算的开发
    四则运算app总结
    对其它组评价的反馈
    第三次spring冲刺2
    阅读《构建之法》第13-17章
    对其他组的评价
    第三次spring冲刺1
    阅读11,12章
  • 原文地址:https://www.cnblogs.com/tobemaster/p/5747279.html
Copyright © 2011-2022 走看看