该模式属于行为型模式
什么是观察者模式?
它是一种事件系统,意味着这一模式允许某个类观察另一个类的状态,当被观察的类的状态发生改变的时候,观察类可以收到通知并且做出相应的动作。观察者模式提供了避免组件之间紧密耦合的另一种方法。
比如说:A类和B类 A类在观察B类的状态,如果发现B类的状态发生改变,那么A类会马上收到通知 并且做出相应的动作。
话不多说上代码:
<?php //观察者模式涉及到2个类或多个类 //这里我们创建 男人类(在这里我们将该类定义为被观察者类) 和 女朋友类(在这里我们将该类定义为观察者类) //男人类对象->小明 女朋友类对象->小丽 //代码模拟实现:当小明这个对象花钱的时候 小丽这个对象立刻做出相应动作 //定义一个男人类(被观察者类) class Man { //该属性 用来存放观察者 public $observers = array(); //该方法 用来添加观察者 public function addObserver($observer) { $this->observers[] = $observer; } //花钱的方法 public function buy() { //当男人类的对象调用buy这个方法的时候,就立刻向女朋友类的对象发出通知,然后女朋友类的对象立马做出相应反应 //当被观察者做出这个行为的时候,让观察者得到通知,并且做出相应反应 foreach($this->observers as $girl) { $girl->dongjie(); //向观察者发出通知 } } //删除观察者方法 public function removeObserver($observer) { //在$this->observers属性中搜索$observer这个值,搜索到了返回该值对应的键名 $key = array_search($observer, $this->observers); //使用array_splice函数来删除某个数组中的元素:从$this->observers属性中删除从$key的位置开始,移除1个元素 array_splice($this->observers, $key, 1); } } //定义一个女朋友类(观察者类) class GirlFriend { //观察者收到通知,并作出下一步反应 public function dongjie() { echo '警告!你的男朋友正在花钱。哦,马上冻结他的银行卡!!!'; } } //创建对象 $xiaoming = new Man(); $xiaoli = new GirlFriend(); //添加观察者 $xiaoming->addObserver($xiaoli); $xiaoming->buy(); //output:警告!你的男朋友正在花钱。哦,马上冻结他的银行卡!!! //删除某个观察者 $xiaoming->removeObserver($xiaoli);
声明:禁止任何非法用途使用,凡因违规使用而引起的任何法律纠纷,本站概不负责。
精彩评论