php-设计模式-观察者模式

观察者模式-陈帅同学理解版本

首先看 UML图



代码实现

<?php
/**
* Created by PhpStorm.
* User: chen
* Date: 2018/3/14
* Time: 上午9:58
*/

#主题接口
interface Subject
{

#添加对象
public function attach(observer $observer);

#删除对象
public function detach(observer $observer);

#通知
public function notify();

}


#具体实现类
class ConcreteSubject implements Subject
{
private $observerList = [];

#添加具体观察者
public function attach(observer $observer)
{
// TODO: Implement attach() method.
$this->observerList[] = $observer;
}

#删除具体观察者
public function detach(observer $observer)
{
// TODO: Implement detach() method.
$index = array_search($observer,$this->observerList);
unset($this->observerList[$index]);
}

#通知观察者执行更新
public function notify()
{
// TODO: Implement notify() method.
foreach ($this->observerList as $key => $value){
$value->update(); //依赖
}
}
}



#更新接口
interface observer
{
public function update();
}


class Concreteobserver0 implements observer
{
public function update()
{
// TODO: Implement update() method.
echo '一营发现敌人:)',PHP_EOL;
}
}


class Concreteobserver1 implements observer
{
public function update()
{
// TODO: Implement update() method.
echo '二营发现敌人>.<',PHP_EOL;
}
}

#具体主题
$subject = new ConcreteSubject();

#具体观察者
$observer0 = new Concreteobserver0();
$observer1 = new Concreteobserver1();

#添加观察者
$subject->attach($observer0);
$subject->attach($observer1);

#通知
$subject->notify();


我对观察者模式理解:

模式动机
建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应做出反应。在此,发生改变的对象称为观察目标,而被通知的对象称为观察者,一个观察目标可以对应多个观察者,而且这些观察者之间没有相互联系,可以根据需要增加和删除观察者,使得系统更易于扩展,这就是观察者模式的模式动机。

模式定义
观察者模式(Observer Pattern):定义对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。观察者模式又叫做发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。
tags: PHP,设计模式