首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

设计形式-观察者模式

2012-09-06 
设计模式-观察者模式/** * * * 买票 * 记录购买信息 * 送优惠卷 * 短信日志记录 * 文本日志 **/由于原文是

设计模式-观察者模式

/** * * * 买票 * 记录购买信息 * 送优惠卷 * 短信日志记录 * 文本日志 *  */由于原文是使用JAVA来实现 , 下面我用phpSPL工具 来实现观察者模式 实现这个案例/** * 构建主题, 用于发送通知 *  *  * */class buyTicket implements SplSubject  {private $ticket;private $storage;function __construct (){$this->storage = new SplObjectStorage();}function attach( SplObserver $object ){$this->storage->attach($object);}function detach( SplObserver $object ){$this->storage->detach($object);}function notify(){foreach ( $this->storage as $obs ){$obs->update( $this );}}/** * 买票成功  * 发送通知记录日志 * 送折扣劵 * * @return buyTicket */function buyTicket(){$this->ticket = 'NO.12, $100.';$this->notify();}function getTicket(){return $this->ticket;}}/** * 接收通知的观察者 * 判断通知来源, 并且相应观察者执行相应的操作 * */abstract class  ticketObject implements SplObserver {private $buyTicket;function __construct( buyTicket $buyTicket ){$this->buyTicket = $buyTicket;$buyTicket->attach( $this );}function update( SplSubject $subject ) {if( $subject === $this->buyTicket ){$this->doUpdate( $subject );}}abstract  function doUpdate( SplSubject $buyTicket );}/** *  * 日志观察者接到通知记录日志 * */class ticketLogger  extends  ticketObject {function doUpdate( SplSubject $buyTicket ){print __CLASS__.' 日志计入 买票 '.$buyTicket->getTicket()."\n";}}/** *  * 折扣劵观察者 接到通知发送折扣劵 * */class ticketDid  extends ticketObject {function doUpdate( SplSubject $buyTicket ){print __CLASS__."\t 送10元折扣卷一张".$buyTicket->getTicket();}}$ticket = new buyTicket();new ticketLogger( $ticket );new ticketDid( $ticket );$ticket->buyTicket();

热点排行