说到观察者模式,我想大家并不陌生,今天给大家介绍下观察者模式。

首先来看下观察者模式的的定义:定义了对象之间一对多的依赖,这样一来,当一个对象改变时,它的所有的依赖者都会收到通知并自动更新。就像支付宝里的花呗生活号一样,当你订阅了花呗生活号,一旦花呗有什么新的功能堆出来,就会把消息推送给你。当然有的消息也可能是根据用户的使用行为进行推送,这里不再考虑。好了,开始我们的观察者模式吧。

先定义一个生活号的接口:

package observerpattern;

public interface Subject {/**
    * 注册一个观察者
    * @param observer
    */
   void registerObserver(Observer observer);

   /**
    * 移除一个观察者
    * @param observer
    */
   void unRegisterObserver(Observer observer);

   /**
    * 通知所有的观察者
    */
   void notifyObservers();

}

接着定义一个观察者的接口:

package observerpattern;

public interface Observer {/**
    * 消息更新
    * @param msg
     */
   void update(String msg);
}

现在我们创建一个花呗生活号:

/**
 * 花呗生活号
 */
public class AliSubject implements Subject {private List<Observer> mObservers = new ArrayList<Observer>();
    private String msg;

    @Override
    public void registerObserver(Observer observer) {mObservers.add(observer);
    }@Override
    public void unRegisterObserver(Observer observer) {for (int i = 0; i < mObservers.size(); i++) {if (mObservers.contains(observer)) {mObservers.remove(observer);
                break;
            }}}@Override
    public void notifyObservers() {// TODO Auto-generated method stub
        for (Observer observer : mObservers) {observer.update(msg);
        }}public void sendMessage(String msg) {this.msg = msg;
        notifyObservers();
    }}

有了生活号,就有了用户。用户有权选择订阅生活号和取消订阅生活号。

花呗用户1:

package observerpattern;

public class ObserverUser implements Observer {private Subject subject;

   public ObserverUser(Subject subject) {super();
      this.subject = subject;
   }/**
    * 开启花呗服务窗口
    */
   public void register(){subject.registerObserver(this);
   }/**
    * 关闭花呗服务窗口
    */
   public void remove(){subject.unRegisterObserver(this);
      System.out.println("用户1取消关注花呗生活号");
   }@Override
   public void update(String msg) {System.out.println(msg);
   }}

花呗用户2:

package observerpattern;

public class ObserverUser2 implements Observer {private Subject subject;

   public ObserverUser2(Subject subject) {super();
      this.subject = subject;
   }/**
    * 开启花呗服务窗口
    */
   public void register(){subject.registerObserver(this);
   }/**
    * 关闭花呗服务窗口
    */
   public void remove(){subject.unRegisterObserver(this);
   }@Override
   public void update(String msg) {System.out.println(msg);
   }}

现在花呗生活有消息更新了:

public class TestSubject {public static void main(String[] args) {AliSubject mSubject = new AliSubject();
      ObserverUser mUser = new ObserverUser(mSubject);
      ObserverUser2 mUser2 = new ObserverUser2(mSubject);
      mUser.register();
      mUser2.register();
      mSubject.sendMessage("您的花呗额度更新了...");
   }}

控制台输出:

您的花呗额度更新了...
您的花呗额度更新了...

现在用户1,要取消对花呗生活号的关注:

public class TestFactory {public static void main(String[] args) {AliSubject mSubject = new AliSubject();
      ObserverUser mUser = new ObserverUser(mSubject);
      ObserverUser2 mUser2 = new ObserverUser2(mSubject);
      mUser.register();
      mUser2.register();
      mSubject.sendMessage("您的花呗额度更新了...");
      mUser.remove();
      mSubject.sendMessage("您的花呗额度更新了...");
   }}

控制台输出:

您的花呗额度更新了...
您的花呗额度更新了...
用户1取消关注花呗生活号
您的花呗额度更新了...

我们可以看到用户1,取消了关注,当花呗生活号再次推送消息的时候,用户1已经不再接收消息。其实观察者模式,还是很常见的,像我们安卓中的广播,就是一个很好的列子。有兴趣的同学可以抽出点时间来,好好去看下广播的实现方式。好了,到这里恭喜你已经学会了观察者模式。感谢路过。

Java设计模式 观察者模式 花呗生活号相关推荐

  1. Java设计模式-观察者模式(订阅发布模式)

    Java设计模式-观察者模式(订阅发布模式) 一起来看 会了就当复习丫,不会来一起来看看吧. 很喜欢一句话:"八小时内谋生活,八小时外谋发展". 如果你也喜欢,让我们一起坚持吧!! ...

  2. java设计模式--观察者模式(Observer)

    java设计模式--观察者模式(Observer) java设计模式--观察者模式(Observer) 观察者模式的定义: 定义对象间的一种一对多的依赖关系.当一个对象的状态发生改变时,所有依赖于它的 ...

  3. java设计模式观察者模式吗_Java设计模式之观察者模式原理与用法详解

    Java设计模式之观察者模式原理与用法详解 本文实例讲述了Java设计模式之观察者模式原理与用法.分享给大家供大家参考,具体如下: 什么是观察者模式 可以这么理解: 观察者模式定义了一种一对多的依赖关 ...

  4. java设计模式 观察者模式_理解java设计模式之观察者模式

    在生活实际中,我们经常会遇到关注一个事物数据变化的情况,例如生活中的温度记录仪,当温度变化时,我们观察它温度变化的曲线,温度记录日志等.对于这一类问题,很接近java设计模式里面的"观察者模 ...

  5. JAVA 设计模式 观察者模式

    用途 观察者模式 (Observer) 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象. 这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己. 观 ...

  6. Java设计模式——观察者模式

    转自:http://www.cnblogs.com/shamgod/p/4588557.html 一.概述 childe类中的是关联监听者dad的,若要再增加监听者,会很不方便,且要修改代码.好的方法 ...

  7. Java设计模式—观察者模式(Observer pattern)

    故事: 小雪是一个非常漂亮的女孩,漂亮的女孩总是有很多的追求者,而且追求者的队伍在不断的变动,随时有人进入这个队伍,也有人退出.男孩们追求女孩时总是表现出120%的关心,当小雪私自游玩时总是不断收到追 ...

  8. java设计模式-观察者模式

    观察者模式介绍: 观察者模式(有时又被称为发布/订阅模式)是软件设计模式的一种.在此种模式中,一个目标对象管理所有相依于它的观察者对象,并且在它本身的状态改变时主动发出通知.这通常透过呼叫各观察者所提 ...

  9. Java设计模式——观察者模式与Spring事件监听器

    写在前面的话:终于通读了一遍<Spring源码深度解析>,在Spring的消息发布(Message)模块使用了设计模式中的观察者模式的经典实现,所以趁此机会总结一些. 1. 业务场景 Sp ...

最新文章

  1. 【LC3开源峰会网络技术系列之三】基于JStorm的网络分析平台
  2. java返回值变为文件_Java 文件操作-File
  3. NOI 2015 品酒大会
  4. TCRP风控管理师知识点:信贷评分卡模型授信
  5. [Ljava.lang.Object; cannot be cast to com.gxuwz.check.entity.SysClasses
  6. Flickr30k图像标注数据集下载及使用方法(转载的,备忘)
  7. 消费消息删除_【进阶之路】可靠消息最终一致性解决方案
  8. 使用C++对TINY+语言进行词法分析、语法分析、语义分析和中间代码生成
  9. suse 安装php5.4_SUSE LINUX 安装Apache2 + PHP5 (普通安装,不是yum)
  10. IOS 微信支付流程详解
  11. nextcloud+nginx+mysql_nextcloud网盘搭建:Ubuntu18.04+Nginx+Mysql
  12. vue 左侧菜单隐藏_vue.js 左侧二级菜单显示与隐藏切换的实例代码?
  13. 一文带你实现RPC框架
  14. 学生学籍管理系统页面源代码html_学生信息管理系统系统源代码
  15. Maxon Motor参数查询方法
  16. 边框给背景图css怎么写,使用css设置边框背景图片
  17. 2017美团校招安卓岗
  18. pycharm+python3.6安装pywifi
  19. Java 性能调优 (JVM CPU IO Memery)
  20. 中南大学2015年研究生复试淘汰率将超40%

热门文章

  1. 【学习笔记】Hive
  2. Android TV开发 TCL电视开发实战 ui适配和焦点控制 Recyclerview自定义
  3. 关于error: #20: identifier “XXXX“ is undefined缺失.h文件的问题
  4. 搭建自己的健康上报APP全栈开发教学
  5. 索尼android 8,索尼立功!让Android 8.0有了一个黑科技
  6. Python3 list 排序函数详解
  7. tableau画时序图
  8. 2022/07/17、18 day10/11:Stream流、方法引用
  9. mamp开启php错误提示,PHP-为什么MAMP不显示错误?
  10. 史上最详细python学习路线-从入门到精通,只需5个月时间