<?php
// 主题 接口
interface Subject
{
// 注册方法 添加观察者
public function register(Observer $observer);
// 提醒方法 当主题有变化时 提醒观察者
public function notify();
}
// 观察者 接口
interface Observer
{
// 观察者 得到提醒后 做出动作
public function say();
}
// 主题
class Player implements Subject
{
public $observers = array();
public function register(Observer $observer)
{
$this-> observers[] = $observer;
}
public function notify()
{
foreach($this->observers as $observer)
{
$observer->say();
}
}
}
// 观察者 小马
class Ma implements Observer
{
public function say()
{
echo "这波操作不亏啊\n";
}
}
// 观察者 小崔
class Cui implements Observer
{
public function say()
{
echo "可以啊大兄弟\n";
}
}
// 观察者 小牛
class Niu implements Observer
{
public function say()
{
echo "稳健\n";
}
}
// 主题
$sf = new Player();
// 观察者
$ma = new Ma();
$cui = new Cui();
$niu = new Niu();
// 主题中注册观察者
$sf->register($ma);
$sf->register($cui);
$sf->register($niu);
// 主题发生了变化
$sf->notify();
百度百科中对观察者模式的定义如下:
观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式、模型-视图(View)模式、源-收听者(Listener)模式或从属者模式)是软件设计模式中的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实现事件处理系统。
观察者模式(Observer)完美的将观察者和被观察的对象分离开。举个例子,用户界面可以作为一个观察者,业务数据是被观察者,用户界面观察业务数据的变化,发现数据变化后,就显示在界面上。
举个例子,我在玩dota2游戏,我身边几个朋友在观察我玩,此时我就是主题,我几个朋友就是观察者,当我一波逆天操作后,这几个观察者就会发生对应的方法;
不知道是电脑问题还是浏览器问题,这个电脑偶尔打开一次,再也不想用了,只有这个电脑才会出现博客顺序变乱,文字不能选中,不能复制,不能粘贴