zoukankan      html  css  js  c++  java
  • php设计模式之观察者模式

    观察者设计模式定义了对象间的一种一对多的依赖关系,以便一个对象的状态发生变化时,所有依赖于它的对象都得到通知并自动刷新。

    观察者模式中最主要的两类对象是:观察者和被观察者。

    在实际业务中被观察者往往是某些逻辑处理类,而观察者往往相当于一个通知人,可以是某个场景或业务操作,去注册和通知这些被观察者采取行动(update)。这种模式使得业务和逻辑分离,减少耦合,让代码更加高效。请看下面我的代码去更好的理解吧。

    <?php
    
    /**
    * 观察者模式
    * 假设我们的场景是参加某促销活动的用户扣积分并返现,并提高等级。
    *
    **/
    
    /**
    * 观察者需要实现的接口
    **/
    interface Observerable{
    public function update();
    }
    
    /**
    * 积分类 处理积分扣除
    **/
    
    class Points implements Observerable{
    public function update() {
    echo '扣除积分' , "<br/>";
    }
    }
    
    /**
    * 账单类 处理返现,这里就reback 10 rmb
    **/
    
    class Checkouts implements Observerable{
    public function update() {
    echo '返现10rmb' , "<br/>";
    }
    
    }
    
    /**
    * 用户等级类 处理用户等级。
    **/
    
    class Ranks implements Observerable{
    public function update() {
    echo '提高等级一级' , "<br/>";
    }
    }
    
    /**
    * 促销类 
    **/
    class Promotion {
    private $observers = array();
    
    public function register(Observerable $o) { // 注册观察者
    array_push($this->observers, $o);
    }
    
    public function notify() { // 通知观察者们开始各自更新操作
    if (empty($this->observers)) die('没有任何操作可言');
    foreach ($this->observers as $o) {
    $o->update(); // 进行更新
    }
    }
    }
    
    // --------------------客户端调用--------
    $promotion = new Promotion();
    $promotion->register(new Points());
    $promotion->register(new Checkouts());
    $promotion->register(new Ranks());
    $promotion->notify();
    
    // out print 
    /**扣除积分
    返现10rmb
    提高等级一级**/
  • 相关阅读:
    Array.sort源码
    Linkedlist源码
    最大公约数 2.7
    腾讯笔试题
    腾讯2014校园招聘笔试题
    指针问题
    JavaScript 日历
    QT 初阶 第二章 创建对话框(查找对话框实例)
    QT 初阶 1.3 节 控件的几何排列
    “项目中的问题”
  • 原文地址:https://www.cnblogs.com/freephp/p/4853912.html
Copyright © 2011-2022 走看看