PHP设计模式之观察者模式

<?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游戏,我身边几个朋友在观察我玩,此时我就是主题,我几个朋友就是观察者,当我一波逆天操作后,这几个观察者就会发生对应的方法;


不知道是电脑问题还是浏览器问题,这个电脑偶尔打开一次,再也不想用了,只有这个电脑才会出现博客顺序变乱,文字不能选中,不能复制,不能粘贴



扫描二维码关注公众号,回复: 1619587 查看本文章


猜你喜欢

转载自blog.csdn.net/dote2r/article/details/78569116