• php设计模式-观察者模式


    在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 );
  • 相关阅读:
    MySQL 安装
    MySQL简介
    图解十大经典的机器学习算法
    基于Python预测股价
    10_通过httprequest获取跟请求相关的信息
    07_参数提交时action的写法
    08_ServletConfig介绍
    05_servlet生命周期介绍
    06_url_pattern三种写法
    03_servletHello完成
  • 原文地址:https://www.cnblogs.com/ghostwu/p/8461827.html
Copyright © 2020-2023  润新知