博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php设计模式-观察者模式
阅读量:5025 次
发布时间:2019-06-12

本文共 1679 字,大约阅读时间需要 5 分钟。

在web应用中,通常,一些小范围的数据和业务的改变,其他相关的业务数据也需要发生改变,这种情况,观察者模式很适合。

观察者模式,通常是通过使用一个叫Observer的接口实现的,如果其他的类要引入观察者,就要实现这个接口

比如,有一个这样的需求,如果产品汇率改变了,所有产品的相关页面展示信息和价格计算也跟着改变

1 interface Observer { 2     function notify( $obj ); 3 } 4  5 class ExchangeRate { 6     static private $instance = NULL; 7     private $observers = array();     8     private $exchange_rate; 9 10     private function __construct(){11     }12 13     private function __clone(){14     }15 16     public static function getInstance(){17         if( self::$instance == NULL ) {18             self::$instance = new ExchangeRate();19         }20         return self::$instance;21     }22 23     public function getExchangeRate(){24         return $this->exchange_rate;25     }26 27     public function setExchangeRate( $new_rate ){28         $this->exchange_rate = $new_rate;29         //汇率改变,通知所有观察者30         $this->notifyObservers();31     }32 33     public function registerObservers( $obj ){34         $this->observers[] = $obj;35     }36 37     public function notifyObservers(){38         foreach( $this->observers as $observer ) {39             //通知观察者40             $observer->notify( $this );41         }42     }43 }44 45 class ProductItem implements Observer {46     public function __construct(){47         //注册成为汇率的观察者48         ExchangeRate::getInstance()->registerObservers( $this );49     }50     public function notify( $obj ){51         if( $obj instanceof ExchangeRate ) {52             echo "请更新产品的汇率" . PHP_EOL;53         }54     }55 }56 57 $p1 = new ProductItem();58 $p2 = new ProductItem();59     60 ExchangeRate::getInstance()->setExchangeRate( 6.2 );

 

转载于:https://www.cnblogs.com/ghostwu/p/8461827.html

你可能感兴趣的文章
bzoj 4180: 字符串计数
查看>>
Java重写《C经典100题》 --27
查看>>
PHP 的 HMAC_SHA1算法 实现
查看>>
程序员面试、算法研究、编程艺术、红黑树4大系列集锦与总结 .
查看>>
idea tomcat 配置
查看>>
冲刺第二天
查看>>
LeetCode 405. Convert a Number to Hexadecimal (把一个数转化为16进制)
查看>>
ASP.NET MVC 3–Global Action Filters
查看>>
OFFICE安装提示1935错误
查看>>
jva基础网络编程
查看>>
js 正计时和倒计时
查看>>
复合数据类型,英文词频统计
查看>>
you-get帮助使用手册
查看>>
nyoj756_重建二叉树_先序遍历
查看>>
sin()函数的实现
查看>>
图像切割之(一)概述
查看>>
JAVA修饰符类型(public,protected,private,friendly)
查看>>
flex利用webservice上传照片
查看>>
IOS开发之Bug--使用KVC的易错情况
查看>>
python list和tuple
查看>>