zoukankan      html  css  js  c++  java
  • Java学习笔记-观察者模式

    观察者模式(发布订阅)

    本文参考:headfirst设计模式、设计模式、维基百科。
     
      导例:以订阅报纸为例,你在日报社订阅了“日报”,每天日报社印完了报纸(当然这个时间每天是无法十分精确的)就给你送到家(或者送到你家附近的经销点,你下班可以去拿),这就是一个简单的观察者模式,报社和读者是一对多的依赖关系,但是以报纸为信息媒介,二者却互不影响了(报社任何时间可以发布任何信息,只有形式受限——必须印在报纸上;而读者多少如何跟不受影响了),这相当于剥离了依赖关系中的变化部分
      定义:定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。这种通知消息的传递可以是“推送”,也可以是“拉取”,两种方式有自己各自的特点。
      设计原则:1.找出程序中会变化的方面,然后将其和固定不变的方面相分离。
            2.为了交互对象之间的松耦合设计而努力
      观察者模式的实现很灵活,应该满足的简单模式如下:
      如上图所示:观察者调用主题的register方法,将观察者加入主题的订阅列表,当主题信息改变的时候,调用观察者的update方法,将数据传输给观察者,同样这个update方法可以在主题中实现,让观察者调用,这样就实现了拉的形式。
      当然,Java为观察者模式提供了内置的支持
      interface Observer    updata();
      public class Observable extends Object   
      缺点:Observable是一个类而不是接口,违反了原则,直接面向实现编程,可扩展性差,所以还是尽量自己实现。
     
    为了方便使用和学习,做了简单的代码示例:
  • 相关阅读:
    POJ2524+并查集
    POJ3697+BFS+hash存边
    POJ1151+线段树+扫描线
    POJ2528+线段树
    ubuntu 和 win7 远程登陆 + vnc登陆
    POJ3690+位运算
    POJ3283+字典树
    POJ3282+模拟
    POJ2349+prim
    2016.6.13
  • 原文地址:https://www.cnblogs.com/lance-/p/3565588.html
Copyright © 2011-2022 走看看