php设计模式之———观察者模式
程序员文章站
2022-05-17 08:39:50
...
观察者模式
观察者模式(Observer),当一个对象状态发生改变时,依赖它的对象全部收到通知,并自动更新。
模式中的角色
- 抽象被观察者(抽象类,方便扩展)将观察者对象存放在一个容器里,该类提供一些接口,例如增加观察者,撤销观察者,通知观察者(notify)
- 具体被观察者(具体类,继承被观察者抽象类) 存入需要通知的观察者,当观察者需要update时,调用notify方法
- 抽象观察者(接口或抽象类)为具体的观察者提供更新的接口,当被观察者通知时进行update
- 具体观察者(具体类,继承或实现抽象观察者) 实现抽象观察者的接口,自动update
phpDemo
抽象被观察者
abstractclassEventGenerator{private$observer_arr = array();
/*
添加观察者
*/publicfunctionaddObserver( Observer $observer)
{$this->observer_arr[] = $observer;
}
/*
通知所有观察者
*/publicfunctionnotify()
{foreach ($this->observer_arr as$observer)
{
$observer->update();
}
}
}
具体被观察者
classEventextendsEventGenerator{publicfunctiontrigger()
{echo'event happen!
';
//当事件发生时,通知所有观察者$this->notify();
}
}
抽象观察者
interfaceObserver{//自动更新functionupdate();
}
具体观察者
classObserver1implementsObserver{//实现update方法publicfunctionupdate()
{echo'observer1 update
';
}
}
classObserver2implementsObserver{//实现update方法publicfunctionupdate()
{echo'observer2 update
';
}
}
测试代码
$obj = new Event();
//添加观察者$obj->addObserver(new Observer1());
$obj->addObserver(new Observer2());
$obj->trigger();
模式总结
- 优点:观察者模式实现了低耦合,非侵入式的通知和自动更新机制
- 缺点:依赖关系并未完全解除,抽象通知者依旧依赖抽象的观察者
- 试用场景:1.当一个对象的改变需要给变其它对象时,而且它不知道具体有多少个对象有待改变时; 2.一个抽象某型有两个方面,当其中一个方面依赖于另一个方面,这时用观察者模式可以将这两者封装在独立的对象中使它们各自独立地改变和复用
以上就介绍了php设计模式之———观察者模式,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。