美文网首页
设计模式(十九):观察者模式

设计模式(十九):观察者模式

作者: 何笙 | 来源:发表于2019-05-21 11:14 被阅读0次

观察者模式有时也被称作发布/订阅模式,该模式用于为对象实现发布/订阅功能:一旦主体对象状态发生改变,与之关联的观察者对象会收到通知,并进行相应操作。

将一个系统分割成一个一些类相互协作的类有一个不好的副作用,那就是需要维护相关对象间的一致性。我们不希望为了维持一致性而使各类紧密耦合,这样会给维护、扩展和重用都带来不便。观察者就是解决这类的耦合关系的。

消息队列系统、事件都使用了观察者模式。

业务场景:

哈票以购票为核心业务(此模式不限于该业务),但围绕购票会产生不同的其他逻辑,如:
1、购票后记录文本日志
2、购票后记录数据库日志
3、购票后发送短信
4、购票送抵扣卷、兑换卷、积分
5、其他各类活动等

传统解决方案:
在购票逻辑等类内部增加相关代码,完成各种逻辑。

观察者模式典型实现方式:
1、定义2个接口:观察者(通知)接口、被观察者(主题)接口
2、定义2个类,观察者对象实现观察者接口、主题类实现被观者接口
3、主题类注册自己需要通知的观察者
4、主题类某个业务逻辑发生时通知观察者对象,每个观察者执行自己的业务逻辑。

示例代码:
观察者接口:

interface TicketObserver {
     //得到通知后调用的方法
     public function onBuyTicketOver($sender, $args);
}

被观察者接口:

interface TicketObservable {
    //提供注册观察者方法
    public function addObserver($observer);
}

观察者:

//短信通知
class MSM implements ITicketObserver {
    public function onBuyTicketOver($sender, $ticket) {
        echo "短信通知";
    }
}
//push通知
class Push implements ITicketObserver {
    public function onBuyTicketOver($sender, $ticket) {
        echo "push通知";
    }
}

被观察者:

class Ticket implements TicketObservable {
    private $_comsumer;
    private $_observers = array (); //观察者
    //购票流程
    public function buyTicket($ticket) {
       // TODO 购票逻辑
       //循环通知,调用其onBuyTicketOver实现不同业务逻辑
       foreach ( $this->_observers as $obs )
           $obs->onBuyTicketOver ( $this->_comsumer, $ticket );
    }
     //添加通知
    public function addObserver($observer) {
       $this->_observers [] = $observer;
    }
}


相关文章

  • 观察者设计模式

    每周学点Java设计模式__观察者设计模式 本次继续更新java23中设计模式之一——观察者模式。 观察者模式(有...

  • RxJava基础—观察者模式

    设计模式-观察者模式 观察者模式:观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式...

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

    [toc] 设计模式02-观察者者设计模式 主要来源Head First设计模式(书)观察者设计模式是JDK中使用...

  • 11.9设计模式-观察者模式-详解

    设计模式-观察者模式 观察者模式详解 观察者模式在android中的实际运用 1.观察者模式详解 2.观察者模式在...

  • RxJava设计模式与原理

    标准观察者设计模式 RxJava是一种特殊的观察者模式,首先我们先来看标准的观察者设计模式。在标准观察者模式中,存...

  • 设计模式

    常用的设计模式有,单例设计模式、观察者设计模式、工厂设计模式、装饰设计模式、代理设计模式,模板设计模式等等。 单例...

  • Guava源码分析——EventBus

    EventBus的设计理念是基于观察者模式的,可以参考设计模式(1)—观察者模式先来了解该设计模式。 1、程序示例...

  • 设计模式之观察者模式

    设计模式之观察者模式 本篇是设计模式系列博客的第四篇,本篇主要学习设计模式中的第二个行为型模式---观察者模式。 ...

  • PHP设计模式之观察者模式

    PHP设计模式之观察者模式

  • Android中涉及的模式

    我的Java设计模式-建造者模式 我的Java设计模式-观察者模式 重学设计模式之单例模式

网友评论

      本文标题:设计模式(十九):观察者模式

      本文链接:https://www.haomeiwen.com/subject/jsnraqtx.html