PHP设计模式观察器(观察模式)
复制代码代码如下所示:< PHP
*观察者模式
*
*定义对象之间的一对多依赖关系,这样当对象的所有状态发生变化时,所有依赖对象都将自动通知和刷新。
*可以轻松创建对象,查看目标对象的状态,并提供不耦合到核心对象的指定函数。
*插件系统
* /
课堂观察者
{
私人_observers美元=阵();
公共功能registerobserver($观察)
{
美元-> _observers { } = $观测器;
}
公共功能removeobserver($观察)
{
美元关键= array_search($观测器,美元-> _observers);
(如果!($ = false)
{
unset(美元-> _observers { $关键});
}
}
公共功能notifyobservers()
{
foreach(美元-> _observers达观察)
{
如果($观察是观察者)观察->更新美元(美元的);
}
}
}
界面观察
{
公共功能更新($观察员);
}
接口displayelement
{
公共功能显示器();
}
类定义
类newsobserverable延伸观察者
{
私人_sports_news美元;
公共功能setsportsnews($数据)
{
美元-> _sports_news = $数据;
美元-> notifyobservers();
}
公共功能getsportsnews()
{
返回_sports_news美元->;
}
私人_local_news美元;
公共功能setlocalnews($数据)
{
美元-> _local_news = $数据;
$this->notifyObservers ();
}
公共功能getlocalnews()
{
返回_local_news美元->;
}
}
体育类实现了观察者,displayelement
{
私人_data美元= null;
公共功能更新($观察员)
{
如果(美元-> _data!= $观察-> getsportsnews())
{
美元-> _data = $观察-> getsportsnews();
显示();
}
}
公共功能显示器()
{
echo $这-> _data.date(当前H:我:)。
}
}
类localnews实现观测器,displayelement
{
私人_data美元= null;
公共功能更新($观察员)
{
如果(美元-> _data!= $观察-> getlocalnews())
{
美元-> _data = $观察-> getlocalnews();
显示();
}
}
公共功能显示器()
{
echo $这-> _data.date(当前H:我:)。
}
}
实例化
objobserver美元=新newsobserverable();
当地=新localnews(美元);
新的体育(体育=美元);
objobserver -> registerobserver美元(美元的地方);
objobserver美元-> registerobserver($运动);
objobserver美元-> setsportsnews(体育新闻1);
objobserver美元-> setlocalnews(新闻1);
objobserver美元-> removeobserver($运动);
objobserver美元-> setlocalnews(新闻2);
objobserver美元-> setsportsnews(体育新闻2);
objobserver -> removeobserver美元(美元的地方);
objobserver美元-> setlocalnews(新闻3);