美文网首页
观察者模式

观察者模式

作者: 星月落 | 来源:发表于2021-12-12 21:37 被阅读0次

内容来源(公众号:PHP版WEB项目)当对象间存在一对多关系时,可以使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,会自动通知它的依赖对象。观察者模式属于行为型模式。

观察者模式为你提供了避免组件之间紧密耦合的另一种方法。一个对象通过添加一个方法(该方法允许另一个对象(观察者)注册自己)使本身变得可观察。当可观察的对象更改时,它会将消息发送到已注册的观察者,这些观察者使用该信息执行的操作与可观察的对象无关,结果是对象可以相互对话,而不必了解原因。我们通常在主体中定义一个数组,用于存储观察者对象。

下面的代码演示当添加一个用户时如何实现消息推送。

   <?php

  //观察者

  interface IObserver

  {

   function onChanged( $sender,$args );

  }

  //定义可以被观察的对象接口

  interface IObservable

  {

   function addObserver( $observer );

  }

  class UserList implements IObservable

  {

   //数组存放观察者对象

   private $_observers = array();

   public function addCustomer( $name )

   {

              foreach( $this->_observers as $obs )

     $obs->onChanged( $this,$name ); // 通知观察者

   }

   public function addObserver( $observer )

   {

    $this->_observers []= $observer;

   }

  }

  class UserListLogger implements IObserver

  {

   //观察者执行操作

   public function onChanged( $sender,$args )

   {

    echo( "'$args' added to user list\n" );

   }

  }

  //添加第一个观察者

  $ul1 = new UserList();

  $ul1->addObserver( new UserListLogger() );

  $ul1->addCustomer( "Jack" );

  //添加第二个观察者

  $ul2 = new UserList();

  $ul2->addObserver( new UserListLogger() );

  $ul2->addCustomer("Tom");

  ?>

执行以上代码,在浏览器中的打印结果为:

   'Jack' added to user list 'Tom' added to user list

在一个抽象模型中,一个对象需要通知其他对象又不能假定其他对象是谁时,经常使用观察者模式。比如要实现用户注册后发送邮件通知管理员和用户自己填写的邮箱的功能,我们可以将发送邮件给管理员和用户自己都写在这个实现用户注册的类里,但是为了实现松散耦合,我们可以将这个发送邮件的功能单独拿出来写到另外一个类中(使用观察者实现),这样即使在以后更改了用户注册逻辑也不会影响到发送邮件的功能实现。再比如当用户下单购买一件商品时,需要将购买记录写入文本日志、数据库日志,还要发送短信、送抵兑换券积分等,我们可以在主体类中实现下单购买的流程并定义一个观察者接口,当用户下单后通知各个观察者对象执行自己的业务逻辑。

相关文章

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

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

  • RxJava基础—观察者模式

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

  • 前端面试考点之手写系列

    1、观察者模式 观察者模式(基于发布订阅模式) 有观察者,也有被观察者。 观察者需要放到被观察者列表中,被观察者的...

  • RxJava 原理篇

    一、框架思想 观察者模式观察者自下而上注入被观察者被观察者自上而下发射事件观察者模式 装饰器模式自上而下,被观察者...

  • 观察者模式

    观察者模式概念 观察者模式是对象的行为模式,又叫作发布-订阅(publish/subscrible)模式。 观察者...

  • 设计模式-观察者模式

    观察者模式介绍 观察者模式定义 观察者模式(又被称为发布-订阅(Publish/Subscribe)模式,属于行为...

  • 观察者模式

    观察者模式 观察者模式的定义 观察者模式(Observer Pattern)也叫做发布订阅模式(Publish/s...

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

    观察者模式 1、什么是观察者模式 观察者模式有时又被称为发布(publish)-订阅(Subscribe)模式、模...

  • 观察者模式和发布订阅模式区别

    观察者模式 所谓观察者模式,其实就是为了实现松耦合(loosely coupled)。 在观察者模式中,观察者需要...

  • RxJava(二)

    一、观察者模式 1.1、传统的观察者模式 1.2、RxJava 的观察者模式 区别传统的观察者模式是一个 Obse...

网友评论

      本文标题:观察者模式

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