为了账号安全,请及时绑定邮箱和手机立即绑定
慕课网数字资源数据库体验端
观察者模式_学习笔记_慕课网
为了账号安全,请及时绑定邮箱和手机立即绑定

观察者模式

GerryZhang JAVA开发工程师
难度中级
时长 1小时56分
  • 订阅者也就是观察者:黄明的老妈和黄明的女朋友 实现:当天气更新时,黄明老妈和黄明女朋友会收到各自的天气信息内容。 代码流程:定义一个跟天气有关的目标对象,内部有订阅者的列表,以及attach添加订阅者、detach删除订阅者以及通知订阅者并调用订阅者自有的update(目标对象)更新目标状态的方法。在具体的实现中,添加了天气内容的属性,生成get/set方法使得外部可以调用,当设置新的天气内容时,除了给属性赋值以外,还要调用父类的notifyObserver().update(天气内容)通知订阅者更新目标对象。在订阅者中,除了有接口的update(目标对象)方法外,想要完整的接收内容还必须有自己独特的属性,也就是订阅者自己的名字和通知信息,这两个参数是订阅者决定的,而天气信息是从目标对象中获取的,这里是调用了update(ConcreteWetherSubjetc weather)接收最新的目标对象,并通过getWetherSubject()强制转换为具体的实现来获得最新的天气信息。然后输出订阅者名字+天气信息+通知信息。 测试流程是:创建目标对象,创建订阅者(创建订阅者的名称以及通知信息),然后调用目标对象的attach添加订阅者,当调用目标对象的setWeatherContent()添加信息时,目标对象的状态发生改变,便通知订阅者更新内容。打印内容输出到控制台。
    查看全部
  • 目标对象里有着所有观察者的集合,而且提供了向集合中添加观察者以及删除观察者的方法,并且提供了一个向观察者通知目标对象发生变化的notifyObservers()方法;在目标对象的具体实现中,有着目标对象的状态属性,当目标状态发生改变时,触发notifyObservers()方法,通知观察者对象,使观察者知道目标状态已经发生改变。在观察者对象中,有着update()方法,接收目标对象,在观察者的具体实现中,有着观察者状态属性observerstate,当observerState与得到通知的Subject的状态一致的时候,将目标转台同步到观察者的状态中。
    查看全部
  • 下面我们就来看看观察者模式的组成部分。 1) 抽象目标角色(Subject):目标角色知道它的观察者,可以有任意多个观察者观察同一个目标。并且提供注册和删除观察者对象的接口。目标角色往往由抽象类或者接口来实现。 2) 抽象观察者角色(Observer):为那些在目标发生改变时需要获得通知的对象定义一个更新接口。抽象观察者角色主要由抽象类或者接口来实现。 3) 具体目标角色(Concrete Subject):将有关状态存入各个Concrete Observer对象。当它的状态发生改变时, 向它的各个观察者发出通知。 4) 具体观察者角色(Concrete Observer):存储有关状态,这些状态应与目标的状态保持一致。实现Observer的更新接口以使自身状态与目标的状态保持一致。在本角色内也可以维护一个指向Concrete Subject对象的引用。
    查看全部
  • 观察者模式:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
    查看全部
    0 采集 收起 来源:课程简介

    2016-06-24

  • 观察者模式使用场合情况
    查看全部
  • 观察者模式的本质:触发联动
    查看全部
  • 观察者模式的缺点
    查看全部
    0 采集 收起 来源:观察者优缺点

    2016-06-19

  • 观察者模式的优点
    查看全部
    0 采集 收起 来源:观察者优缺点

    2016-06-19

  • Java.util.observable 方式推模型的具体写法。
    查看全部
  • 观察者模式用例图
    查看全部
  • 观察者模式的建立步骤
    查看全部
  • 观察者类所需的变量
    查看全部
  • 观察者模式
    查看全部
    0 采集 收起 来源:课程简介

    2016-05-01

  • 区别对待观察者 即有些观察者要求当更新的天气预报信息为下雨才去通知它们,如果天气晴朗就不需要通知.而不像其他观察者一样,不管天气是否下雨还是晴天,都会去通知它们. 实现具体主题角色根据不同的状态信息来选择对部分观察者进行通知功能,只需使用传统方式. 在抽象观察者接口中声明一个获取具体观察者不需更新的内容的方法.方法返回字符串数组. 在具体观察者中创建字符串数组存放不需要更新的信息内容,并实现方法,返回该数组. 在抽象主题角色使用推模式声明notify()抽象方法,具体主题角色中实现notify()方法,方法中获取具体主题角色的状态信息,在遍历观察者列表时,判断当前要更新的信息是否是观察者需要的.如果符合,则对观察者进行更新,不符合则不更新. 具体主题角色: public class ConcreteSubject extends Subject{ //存放状态信息 private String state; public String void getState(){ return state; } public void setState(String state) { this.state = state; //使用拉模型 this.notifyObserver(); } public void notifyObserver(){ //获取准备更新的内容. String Temp=this.getState(); //此标记用来判断是否要更新,默认要. Boolean isUpdate=true; //循环遍历观察者 for(Observer observer:observers){ //循环遍历观察者不需要更新的内容. for(String arg: observer.getNoUpdate()){ if(Temp.equals(arg){ isUpdate=false; break; } } if(isUpdate){ observer.update(this); }else{ //重置更新标识为true. isUpdate=true; } } } }
    查看全部
    0 采集 收起 来源:目标实现类

    2016-04-30

  • 何时使用观察者模式: 触发联动概括了观察者模式的本质. 当修改具体主题角色的状态之后,就会触发相应的通知,然后会循环调用所有注册了的观察者的更新方法. 建议在以下情况中选用观察者模式: 1.当一个抽象模型有2个方面,其中一个方面的操作依赖于另一个方面的状态变化. 2.如果在更改一个对象的时候,需要同时连带改变其他的对象,而且不知道究竟应该有多少对象需要被连带改变. 3.当一个对象必须通知其他的对象,但是你又希望这个对象和其他被通知的对象是松散耦合.
    查看全部

举报

0/150
提交
取消
课程须知
学习本课程前,需要具备Java基础,面向对象的程序设计思想。如果对这些知识不熟悉,可以学习《Java入门第一季》和《Java入门第二季》这两门课程。
老师告诉你能学到什么?
1、理解观察者模式的概念和结构 2、掌握如何将观察者模式应用到项目中,解决项目实际问题 3、掌握观察者模式的应用场景
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!