观察者模式
发布时间: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(); ? ? ? ? ?? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |