该模式属于行为型模式
什么是观察者模式?
它是一种事件系统,意味着这一模式允许某个类观察另一个类的状态,当被观察的类的状态发生改变的时候,观察类可以收到通知并且做出相应的动作。观察者模式提供了避免组件之间紧密耦合的另一种方法。
比如说: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);声明:禁止任何非法用途使用,凡因违规使用而引起的任何法律纠纷,本站概不负责。


精彩评论