美文网首页
观察者模式粗解

观察者模式粗解

作者: 一枚懒人 | 来源:发表于2018-04-17 22:44 被阅读0次

一:观察者模式作用

观察者模式是一种设计模式,用来解决系统间通信的一种机制。作为系统,必然有以下的场景:

1:上层(用户层)进行一些操作,导致相关变量或者属性发生了改变,而系统中相关配置或者相关场景依赖该属性,因此需要将该变量变化的消息通知系统各个相关场景负责区进行相应的配置。

2:下层(底层)也可以理解为和系统的交互层发生变化,需要将该属性的变化通知到上层,提示用户相应的消息。

总体而言,基于此俩种场景需要使用观察者模式,解决1对多或者1对1 的情景下,将系统不同场景下的属性变化通知到相关负责类对象。

二:观察者模式相关类

本人将观察者模式分为三大类:

1:Subject(主题):也叫被观察者,这个也就是会发生变化的属性,也就是系统或者用户操作产生的结果

2:Observer(观察者):这个是观察者,主要作用是在Subject发生变化之后进行相应的操作来维持系统的稳定

3:Context(上下文):这个主要是在被观察者变化之后发出通知,因为观察者在进程中某处会被注册给Subject,而Sunbect发生变化之后需要通知Observer也需要一定的上下文场景。

在系统中发现一处使用观察者模式时首先找到Context,才能进一步确认Subject和Observer,最后确认调用关系。在系统中,其实就是运行的一条条进程和进程中的线程,观察者模式适用在同一进程间,可能会通过不同的线程来分发消息。

三:相关代码演示

3.1创建Subject类

图1:主要属性 图2:添加观察者 图3 更新观察者 图 4 :相关属性发生变化

3.2 创建Observer父类

图5:更新属性方法

3.3 创建Observer子类

图6 子类1 图7:子类2

3.4 创建Context类

图8:简单模拟整个业务流程

四:相关代码解释

  根据开篇介绍的观察者模式的作用和观察者的三大类,来通过模拟业务介绍整个代码的流程:

4.1 1对多关系的确认

首先系统中存在一个1对多的属性

图9:相关属性

这个属性在本Demo中为了简单放在了Subject类当中,但是实际系统中定然不在此处

这个属性如果发生变化,系统有2个地方需要更新,即MyFirstObserver和MySecondObserver需要更新此为1对多

4.2 :Subject确认

存在1对多关系且有通信的需要,于是就有了建立Subject 的必要。建立Subject就必须存在几个方法:

addObserver(Observer o);

updateObserver();

setRelativeModle(int

relativemodle);

因为属性发生改变,因此通过updateObserver通知所有关心该属性的类,关心该属性的类通过addObserver已经注册到Subject 的

List myRegisty = newArrayList<>();

属性当中

4.3 Context 贯彻业务流程

有了上面1对多的通信需要,也准备了Subject和Observer,那么在系统进程正在启动的某一时刻,系统一定先创建了观察者,如

//创建观察者

MyFirstObserver mFirstObserver  = new MyFirstObserver();

MySecondObserver mSecondObserver = newMySecondObserver();

和Subject

//创建主题

Subject subject = new Subject();

以及在创建完他们,就将Observer和Subject连在一起,如

//将观察者注册到Subject

subject.addObserver(mFirstObserver);

subject.addObserver(mSecondObserver);

到最后一步,系统由于上层的操作或者下层的系统将交互导致属性值relativeModle发生变化时,Subject便去通知所有的观察者去更新,而所有的观察者在进行完update操作时即是接收到系统属性变化的标志。

相关文章

  • 观察者模式粗解

    一:观察者模式作用 观察者模式是一种设计模式,用来解决系统间通信的一种机制。作为系统,必然有以下的场景: 1:上层...

  • 观察者模式结合Android源码

    1.观察者模式最重要的作用? 解耦,将观察者和被观察者解耦。eg:ui层与具体的业务逻辑解耦 2.观察者模式的定义...

  • 观察者模式

    观察者模式介绍 观察者模式是日常使用比较广泛的一种模式,它可以很有效的解耦,将被观察者和观察者解耦,使他们之间的依...

  • 观察者模式vs发布订阅模式

    观察者模式 需要感知双方的存在,耦合 发布订阅模式 类似观察者模式,但是通过中间调度,解耦合

  • Android设计模式之(11)----观察者模式

    观察者模式 观察者模式属于行为模式。 主要用于解耦观察者与被观察者之间的联系。实现观察者一对一或者一对多的关系,当...

  • 对观察者模式的理解

    一、作用 观察者模式的主要的作用就是对对象解耦,将观察者和被观察者完全隔离。 观察者模式解除了主题和具体观察者的耦...

  • 观察者模式

    观察者模式 观察者模式的优点 优点1:将观察者与被观察者进行解耦,便于后期二者独立进行功能扩展,不会形成任何的钳制...

  • 借助工厂模式构建不同的 Fragment

    还记的上篇文章 使用观察者模式解决单 Activity 与多个 Fragment 通信 中我使用了观察者模式暂时解...

  • 设计模式--观察者(订阅)模式

    模式介绍 这个模式最重要的一个作用就是解耦,将观察者和被观察者解耦,使得它们之间的依赖性更小,甚至做到没有。以GU...

  • 2018-04-22 观察者模式和发布订阅模式有什么不同?

    发布订阅模式属于广义上的观察者模式,发布订阅模式是最常用的一种观察者模式的实现,并且从解耦和重用角度来看,更优...

网友评论

      本文标题:观察者模式粗解

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