首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

浅谈观察者设计形式

2013-04-02 
浅谈观察者设计模式记得刚学joomla的时候, 在某些教学网站上提到joomla的代码设计模式是是观察者设计模式

浅谈观察者设计模式
记得刚学joomla的时候, 在某些教学网站上提到joomla的代码设计模式是是"观察者设计模式", 那是我第一次听到"设计模式"的概念.随后就wiki了一下这个模式.可能当时对面向对象的编程方式的认识只是停留在创建一个 class, 然后 new 它. 于是怎么读那段文字也不明所以. 总好像明白了, 但是又什么都不明白. 现在回过头来看看这个模式. 终于找到了理解这个模式的接入点. 下面我和大家一起重头开始研究下这个 "观察者设计模式"
        在研究这个模式之前. 我们要尽可能的了解面向对象编程. 充分了解"对象"的含义.
        "对象", 是一个有自己的属性, 方法的整体. 是一个"类"的实例化的个体.我们可以把"类"想像成一个具体的概念, 而对象就是这个"概念"的具体化的实例.当我们new一个类生成对象开始, 这个对象就在内存中存在, 不管我们给这个对象创建多少个引用(把这个对象付给某个或某些变量), 这个对象在内存中永远是唯一的.比如:

        //被观察者        class Subject{            //所有的观察者            var $observer = array();            //设置观察者            function setObserver( $observer ){                $this->observer[] = $observer;            }            //把观察者的状态(或是其他), 通知给被观察者            function notification(){                if( !empty($this->observer) ){                    foreach($this->observer as $observer){                        $observer->{$observer->updateFun()}( $this->message );                    }                }            }        }        //观察者类1        class observer1{            //被观察者            var $subject = '';            function observer1($subject){                $this->subject = $subject;                $this->subject->setObserver($this);            }            function updateMessage($message){                echo '我是 observer1: ' . $this->subject->message;            }            //当被通知时, 告诉观察者通知接口            function updateFun(){                return 'updateMessage';            }        }        //观察者类2        class observer2{            //被观察者            var $subject = '';            function observer2($subject){                $this->subject = $subject;                $this->subject->setObserver($this);            }            function update($message){                echo '我是 observer2: ' . $this->subject->message;            }            //当被通知时, 告诉观察者通知接口            function updateFun(){                return 'update';            }        }        //观察者类2        class observer3{            //被观察者            var $subject = '';            function observer3($subject){                $this->subject = $subject;                $this->subject->setObserver($this);            }            function notification($message){                echo '我是 observer3: ' . $this->subject->message;            }            //当被通知时, 告诉观察者通知接口            function updateFun(){                return 'notification';            }        }        //调用代码        //被观察者        $subject = new Subject;        //在建立观察者时, 告诉被观察者是谁        $observer1 = new observer1($subject);        $observer2 = new observer2($subject);        $observer3 = new observer3($subject);        $subject->message = '所有的观察者, 都动起来吧 <hr />';        $subject->notification();//被观察者并不知道有几个观察者, 只要在建立观察者时, 告诉被观察者是谁就行了


热点排行