<?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游戏,我身边几个朋友在观察我玩,此时我就是主题,我几个朋友就是观察者,当我一波逆天操作后,这几个观察者就会发生对应的方法;
不知道是电脑问题还是浏览器问题,这个电脑偶尔打开一次,再也不想用了,只有这个电脑才会出现博客顺序变乱,文字不能选中,不能复制,不能粘贴