加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

观察者模式

发布时间:2020-12-14 04:46:27 所属栏目:百科 来源:网络整理
导读:原文链接:http://www.orlion.ga/719/ 解释: ? ??观察者设计模式能够更便利创建和查看目标对象状态的对象,并且提供和核心对象非耦合的置顶功能性。 代码: ????首先是CD类: namespace?Observer;class?CD{public?$title;public?$band;protected?$_observer

原文链接:http://www.orlion.ga/719/

解释:

? ??观察者设计模式能够更便利创建和查看目标对象状态的对象,并且提供和核心对象非耦合的置顶功能性。

代码:

????首先是CD类:

namespace?Observer;

class?CD{

	public?$title;

	public?$band;

	protected?$_observers?=?[];

	public?function?__construct($title?,?$band)?{
		$this->title?=?$title;
		$this->band?=?$band;
	}

	public?function?attachObserver($type?,CDObserver?$observer)?{
		$this->_observers[$type][]?=?$observer;
	}

	public?function?notifyObserver($type)?{
		if?(isset($this->_observers[$type]))?{
			foreach?($this->_observers[$type]?as?$observer)?{
				$observer->update($this);
			}
		}
	}

	public?function?buy()?{
		echo?'CD?buy';
		$this->notifyObserver('purchased');
	}
}

? ? 其中attachObserver()方法注入CD的观察者,而notifyObserver()方法则是通知CD的观察者们,之所以加了一个type是为了更好的对CD的观察者进行分类管理。(也可以理解为不同的事件对应不同的观察者)

????然后就是它的观察者接口CDObserver:

namespace?Observer;
interface?CDObserver{
	function?update(CD?$cd);
}

????然后是观察者的实现SendEmailObserver:

namespace?Observer;

class?SendEmailObserver?implements?CDObserver{
	public?function?update(CD?$cd)?{
		echo?$cd->title?.?"被卖出去了";
	}
}

????在App.php中运行:

require?'CD.php';
require?'CDObserver.php';
require?'SendEmailObserver.php';

$cd?=?new?ObserverCD('whats'?,?'Simple?Plan');
$sendEmailObserver?=?new?ObserverSendEmailObserver();
$cd->attachObserver('purchased'?,?$sendEmailObserver);
$cd->buy();

? ?

?

? ??

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读