博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
观察者模式
阅读量:7119 次
发布时间:2019-06-28

本文共 1218 字,大约阅读时间需要 4 分钟。

原文链接:

解释:

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

代码:

    首先是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 Observer\CD('whats' , 'Simple Plan');$sendEmailObserver = new Observer\SendEmailObserver();$cd->attachObserver('purchased' , $sendEmailObserver);$cd->buy();

   

 

    

转载地址:http://bpiel.baihongyu.com/

你可能感兴趣的文章
iOS--React Native浏览器插件
查看>>
Three.js Scene Graph
查看>>
保持ssh的连接不断开
查看>>
php_screw
查看>>
CentOS 6.2目录服务之LDAP(一)
查看>>
可替代的C语言开发环境
查看>>
从源码分析常见的基于Array的数据结构动态扩容机制
查看>>
前几天入手一大菠萝,写个初始化教程
查看>>
SoapUI Pro Project Solution Collection-DataSource(jdbc,excel)
查看>>
浅谈嵌入式软件的未来发展
查看>>
Dockerfile最佳实践(二)
查看>>
数学之美:两点之间最快的路径
查看>>
Ansible 详细用法部署安装
查看>>
CPU
查看>>
Spark的这些事<二>——几个概念
查看>>
Retrofit2.0使用
查看>>
网络01:双无线路由器无缝对接设置
查看>>
实现Android和PC之间的蓝牙通信
查看>>
rails将类常量重构到数据库对应的表中之二
查看>>
微软面试题:写程序找出二叉树的深度
查看>>