手机版

学习php设计模式php实现观察者模式

时间:2021-09-20 来源:互联网 编辑:宝哥软件园 浏览:

1.它旨在定义对象之间的一对多从属关系。当一个对象的状态改变时,依赖它的所有对象都会得到通知并自动更新。[GOF95]也称为发布-订阅模式、模型-视图模式、源-侦听器模式或从属模式。

3.观察者模式中的主要角色抽象主体角色:主体角色将对观察者对象的所有引用保存在一个集合中,每个主体可以有任意数量的观察者。抽象主题提供了添加和删除观察者对象的接口。抽象观察者角色:为所有特定的观察者定义一个界面,当观察到的话题发生变化时,进行自我更新。ConcreteSubject的作用:将相关状态存储到特定的观察者对象中,当特定主体的内部状态发生变化时,通知所有注册的观察者。特定的主题角色通常由特定的子类实现。ConcretedObserver角色:存储特定的主体对象,存储相关的状态,实现抽象观察者角色所需的更新接口,使其自身的状态与主体的状态一致。4.观察者模式的优缺点观察者模式的优点:1。观察者与话题的耦合度小;2.支持广播通信;观察者模型的缺点:1。因为观察者不知道其他观察者的存在,所以它可能对改变目标的最终成本一无所知。这可能会导致意外的更新。5.观察者模式1的应用场景。当一个抽象模型有两个方面,其中一个依赖于另一个。2.当改变一个对象需要同时改变其他对象时,不知道要改变多少对象。3.当一个对象必须通知其他对象时,它不能假设其他对象是谁。换句话说,您不希望这些对象紧密耦合。不及物动词观察者模式和其他模式的中介器:通过封装复杂的更新语义,变更管理器充当目标和观察者之间的中介器。单例模式(Singleton mode): ChangeManager可以使用Singleton模式来确保它是唯一的并且是全局可访问的。七、观察者模式PHP示例。

?php/** *抽象主题角色*/界面主题{ /** *增加一个新的观察者对象* @param Observer $observer */公共函数附上(观察者$观察者);/** * 删除一个已注册过的观察者对象* @param Observer $observer */公共函数分离(观察者$观察者);/** * 通知所有注册过的观察者对象*/公共函数notify观察者();} /** * 具体主题角色*/class混凝土主题实现subject { private $ _ observer public function _ _ construct(){ $ this-_ observer=array();} /** * 增加一个新的观察者对象* @param Observer $observer */公共函数attach(Observer $ Observer){ return array _ push($ this-_ Observer,$ Observer);} /** * 删除一个已注册过的观察者对象* @ param观察者$观察者*/公共函数detach(Observer $ Observer){ $ index=array _ search($ Observer,$ this-_ Observer);if ($index===FALSE ||!array_key_exists($index,$ this-_ observer)){ return FALSE;} unset($ this-_ observer[$ index]);返回真;} /** * 通知所有注册过的观察者对象*/公共函数notify观察者(){ if(!is _ array($ this-_ observer)){ 0返回FALSE } foreach($ this-_ observer as $ observer){ $ observer-update();}返回真} } /** *抽象观察者角色*/接口观察者{ /** *更新方法*/public函数update();}类混凝土观察者实现观察者{ /** *观察者的名称* @ var type */private $ _ name;public function _ _ construct($ name){ $ this-_ name=$ name;} /** * 更新方法*/public function update(){ echo ' Observer ',$this-_name '已通知。br/';} } /** * 客户端*/class Client { /** *主程序*/public static function main(){ $ subject=new concrete subject();/* 添加第一个观察者*/$观察者R1=新混凝土观察者(‘马丁’);$ subject-attach($观察者R1);回声" br /第一个通知: br/";$主题-通知观察者();/* 添加第二个观察者*/$观察者R2=新混凝土观察者(' phppan ');$ subject-attach($观察者R2);回声" br /第二个通知: br/";$主题-通知观察者();/* 删除第一个观察者*/$ subject-detach($观察者R1);回声br /第三个通知: br/';$主题-通知观察者();} }客户端:3360 main();以上就是使用服务器端编程语言(专业超文本预处理器的缩写)实现观察者模式的代码,还有一些关于观察者模式的概念区分,希望对大家的学习有所帮助。

版权声明:学习php设计模式php实现观察者模式是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。