php设计模式-观察者模式

简言之:观察者模式(Observer),当一个对象状态发生改变时,依赖它的对象全部会收到通知,并自动更新。

具体描述:一个对象通过添加一个方法(该方法允许另一个对象-观察者,注册自己)使本身变得可观察。当可观察的对象更改时,它会将消息发送到已注册的观察者。这些观察者使用该信息执行的操作与可观察的对象无关。结果是对象可以相互对话,而不必了解原因。观察者模式是一种时间系统,意味着这一模式允许某个类观察另一个类的状态。当被观察的类状态发生改变的时候,观察类可以收到通知并且做出相应的动作,观察者模式避免组件之间的紧密耦合。

观察者模式中的角色:

  • Subject(抽象主题角色):主题角色将所有观察者对象的引用保存在一个集合中,每个主题可以有任意多个观察者。抽向主题提供了增加和删除观察者对象的接口。
  • Observer(抽象观察者角色):为所有的具体观察者定义一个接口,在观察的主题发生改变时更新自己。
  • ConcreteSubject(具体主题角色):存储相关状态到具体观察者对象,当具体主题的内部状态改变时,给所有登记过的观察者发出通知,具体主题角色通常用一个具体子类实现。
  • ConcreteObserver(具体观察者角色):存储一个具体主题对象,存储相关状态,实现抽象观察者角色所要求的更新接口,以使得其自身状态和主题的状态保持一致。
推荐阅读代码:


简单代码实现:

\Libs\EventGenerator.php

<?php
namespace Libs;

abstract class EventGenerator
{
	private  $observers=array();
	public function addObserver(Observer $observer)
	{
		echo "添加了-";
		$this->observers[] = $observer;
	}
	public function notify()
	{ 
		foreach ($this->observers as $observer)
		{
			echo "发生了-";
			$observer->update();
		}
	}
}


\Libs\Observer.php

<?php
namespace Libs;

interface Observer
{
	public function update($event_info=null);
}

\Libs\ObserverOne.php

<?php
namespace Libs;

class ObserverOne implements Observer
{
	public function update($event_info=null)
	{
		echo "One!";
	}
}


\Libs\Event

<?php
namespace Libs;

class Event extends \Libs\EventGenerator
{
	public function trigger()
	{
		echo "执行了-";
		$this->notify();
	}
}

调用

$event = new \Libs\Event();
$event->addObserver(new \Libs\ObserverOne);
$event->trigger();

结果:

添加了-执行了-发生了-One!


推荐阅读:

php模式设计之观察者模式

PHP设计模式之观察者模式

PHP 设计模式之观察者模式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值