注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

php开发lnmp

《西安--木木》-经历丰富了生活。 架构师QQ群: 246695517

 
 
 

日志

 
 

观察着模式  

2018-03-12 14:56:15|  分类: 设计模式--php |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |


<?php
/**
* 观察着模式
*/

/**
定义:对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并自动 更新。
思想:将实际扩展操作,降低到子类
应用:登录成功后,发送邮件、写入日志
*/

//主体接口
interface Observable
{
public function attach(Observer $observer);

public function detach(Observer $observer);

public function notify();
}

//主体
class Login implements Observable
{
private $observers = array();//注册观察者

public function attach(Observer $observer)
{
$this->observers[] = $observer;
}

public function detach(Observer $observer)
{
$new_observers = array();
foreach ($this->observers as $obs) {
if ($observer !== $obs) {
$new_observers[] = $obs;
}
}
$this->observers = $new_observers;
}

/**
* 外部统一访问
*/
public function notify()
{
foreach ($this->observers as $obs) {
$obs->update($this);
}
}


// //真实登录
// public function controlLogin(){
// //登录验证
// //数据表操作
// $this->notify();
// }

}

//观察者接口
interface Observer
{
public function update(Observable $observable);

}

abstract class LoginObserver implements Observer
{

private $login = null;

public function __construct(Login $login)
{
$this->login = $login;
$login->attach($this);
}

public function update(Observable $observable)
{
if( $this->login ===$observable){
$this->doUpdate($observable);
}

}

abstract public function doUpdate(Login $login);

}

//观察者子类
class GeneralLog extends LoginObserver{
public function doUpdate(Login $login){
//$login
echo '写入日志','<br/>';
}

}

//观察者子类
class SendEmail extends LoginObserver{
public function doUpdate(Login $login){
//$login
echo '发送邮件','<br/>';
}

}


//客户端
$login = new Login();
new GeneralLog($login);
new SendEmail($login);
$login->notify();//执行观察者类中方法
?>


  评论这张
 
阅读(43)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018