zoukankan      html  css  js  c++  java
  • 观察者模式

    总述:

    设计原则:

    为交互对象之间的松耦合设计而努力。

    设计模式:

    观察者模式在对象之间定义一对多的依赖,这样一来,当一个对象改变状态,依赖他的对象都会收到通知,并自动更新。


    观察者模式中有两类对象:主题和观察者。

    主题只有一个,观察者有许多。

    常见的应用场景:数据更新到客户端

    他们之间的依赖关系:因为主题是拥有数据的人,观察者是主题的依赖者,在数据变化更新时,这样比起让许多对象控制同一份数据来说,可以得到更干净的OO设计

    常见的观察者模式的类图设计

    主题接口:对象使用此类接口注册成为观察者,或者把自己从观察者中删除

    观察者接口:所有潜在的观察者必须实现观察者接口,这个接口只实现update()这一个方法,当状态改变时,它被调用。

    具体主题类:实现主题接口,除了注册和和撤销方法之外,具体主题还要实现notifyObserver()的方法,此方法用于在状态改变时更新所有当前观察者。

                         具体主题类也可能有设置和获取状态的方法。

    下面来介绍一下松耦合。

    当两个对象处于松耦合状态,他们依然可以交互,但是不太清楚彼此之间的细节。

    所以松耦合顾名思义,即利用接口来实现对象与对象之间的关系,以达到改变主题或观察者的其中一方,保证另外一方的代码不需要修改。

    松耦合的设计之所以能让我们建立有弹性的OO系统,能够应对变化,是因为把对象之间的相互依赖降到了最低。

    之所以利用接口作为载体是因为每个观察者观察的角度是有差异的,我们只需做到把数据的传输统一在两个接口之间即可。

    松耦合带来的实用场景:

    保证主题不受影响的情况下:

    • 任何时候我们都可以增加新的观察者,要做的只是在新的类里实现观察者接口。

    • 可以用新的观察者取代现有的观察者。

     

    所以这里引出了一个新的设计原则:


    设计原则:为交互对象之间的松耦合设计而努力。


    实战案例:设计气象站

    下面我们要依照上面的类图来实现这个系统了

    我们这里选择不去调用Java内置的支持,自己动手创建。


    首先我们来建立接口:

    接下来在WeatherData类中实现主题接口:

    现在我们来建立Observer接口的实现类:

    最后建立调试类验证程序:

    结果:


    至此,我们再把观察者模式的行为具体一些:

    观察者模式其中很大的意义是保证主题的安全性。

    观察者模式相比于正常的getter,setter方法,更像是主题将数据通过update方法“推”出来,而getter方法更像是“取”出来的感觉。

  • 相关阅读:
    WINREG.H 编译出错
    WINREG.H 编译出错
    JS创建对象的几种方式
    清除radio单选框外边距
    Dragging MovieClips
    Cannot Say No
    分层提高软件系统的可测试性
    如何从技术上掌控项目?
    领导我只需要你告诉我你要做什么,怎么做让我来好吗?
    如何依据框架进行任务分解
  • 原文地址:https://www.cnblogs.com/Jenken-B/p/11209121.html
Copyright © 2011-2022 走看看