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

观察者模式

GerryZhang JAVA开发工程师
难度中级
时长 1小时56分
  • 在实际开发中,如果意识到模块功能是观察者模式,则可以对通用观察者模式的代码进行套用. 例子: 1.抽象主题角色是具体主题角色统一的一个接口. (知道订阅的人的基本信息,以及有添加和删除和通知订阅的人的方法) 2.可以有很多具体主题角色实现类,代表不同的具体主题,如天气预报主题实现类,可以实例化多个具体主题的对象,初始化不同属性即可,即不同地区的天气预报情况,具体主题角色都继承抽象主题角色. (不同的具体主题角色对象会有自己的状态信息,即不同地区的天气预报信息,且不同具体主题角色对象中保存的订阅者一般不同,所以具体主题角色类只通知订阅了该具体主题角色类的订阅者) 3.抽象观察者角色是所有订阅不同具体主题的人的一个接口. (存在更新方法的接口,参数是抽象主题角色类型,以便订阅情况不同的观察者可以获取对应不同的具体主题的状态信息,所有订阅情况不同的具体观察者角色类都会实现该更新方法,作出不同的业务逻辑) 4.具体观察者角色是某类特定的人订阅某个具体主题,可以有多个具体观察者的类,代表订阅不同具体主题的人群,不同实现类在更新方法上可以作出自己相应的操作,每个类又可以实例化多个具体观察者角色对象,代表订阅同一具体主题的人群,初始化不同的属性即可. (类中除了提供用来保存具体观察者同步被观察者的状态信息属性外,还可以创建用来存放具体观察者的其他属性,如观察者的名字、具体观察者状态发生改变时需提醒具体观察者的内容等.只有保持同步信息的属性是从被观察者中获取的,其他属性都是由观察者自己设置,当具体主题角色调用Notify()方法后会自动调用观察者的update()方法) 测试类中: 1.首先创建一个具体主题角色对象. 2.创建具体观察者对象,可以任意个,初始化观察者的属性. 3.注册观察者到具体主题角色的观察者列表中. 4.具体主题角色更新状态信息(发布信息) 观察者模式的好处就是统一通知,各自处理.
    查看全部
  • //具体被观察者对象,负责把有关状态信息及时更新到相应的观察者对象中. public class ConcreteSubject extends Subject{ //具体被观察者对象的状态信息 private String subjectState; public String getSubjectState(){ return subjectState; } //当具体被观察者的状态信息发生改变时,即使用了setSubjectState()方法,则会调用继承父类的notifyObservers()方法来进行通知观察者类. public void setSubjectState(String subjectState){ this.subjectState = subjectState; this.notifyObservers(); } } //观察者接口,声明一个更新的方法,当具体被观察者对象发生改变时可以及时更新观察者. public interface Observer{ //具体观察者进行更新的方法.传入被观察类,方便获取相应具体被观察类的状态. public void update(Subject subject); } //具体的观察者对象,实现更新方法,使自身的状态和具体被观察者的状态保持一致. public class ConcreteObserver implements Observer{ //具体观察者的状态信息 private String observerState; //实现更新方法 public void update(Subject subject){ //获取具体被观察者的状态(因此要把抽象被观察者类转换为具体被观察者类), 使具体被观察者状态与具体观察者状态保持一致 this.observerState=((ConcreteSubject)subject).getSubjectState(); } }
    查看全部
  • //抽象被观察者角色,它知道观察它的观察者,并提供注册(添加)和删除观察者的接口 public abstract class Subject{ //用于保存注册的观察者对象 private List<Observer> observers =new ArrayList<Observer>(); //把观察者添加到观察者集合中 public void attach(Observer observer){ observers.add(observer); } //删除观察者集合中指定的观察者. public void detach(Observer observer){ observers.remove(observer); } //通知方法,需要通知观察者列表中的所有观察者. protected void notifyObservers(){ for(Observer observer : observers){ //把当前具体被观察者对象传入到update参数中,以便在update()方法中获取被观察者的状态信息. observer.update(this); } } }
    查看全部
  • 观察者模式通用代码 被观察者的状态信息要与观察者的状态信息保持一致,因此当被观察者更新时能及时更新观察者中的状态信息. 组成角色: 抽象主题(Subject)角色:抽象主题角色把所有对观察者对象的引用保存在一个聚集(比如ArrayList对象)里,每个主题都可以有任何数量的观察者.抽象主题提供一个接口,可以增加和删除观察者对象,抽象主题角色又叫做抽象被观察者(Observable)角色. 具体主题(ConcreteSubject)角色:将有关状态存入具体观察者对象,在具体主题的内部状态改变时,给所有登记过的观察者发出通知.具体主题角色又叫做具体被观察者(Concrete Observable)角色. 抽象观察者(Observer)角色:为所有的具体观察者定义一个接口,在得到主题的通知时更新自己,这个接口叫做更新接口. 具体观察者(ConcreteObserver)角色:存储与主题的状态自恰的状态.具体观察者角色实现抽象观察者角色所要求的更新接口,以便使本身的状态与主题的状态相协调.具体观察者角色可以保持一个指向具体主题对象的引用.
    查看全部
  • 观察者模式结构: Subject(被观察的对象)维护一系列的Observer观察者列表. 在Subject中会有添加观察者Attach()方法与删除观察者Detach()方法. 有Notify()方法,当有新的情况更新时,就会自动触发Notify()方法,通知观察者列表的所有观察者. 在观察者Observer中,当收到Notify()通知后会自动调用观察者中的Update()方法进行更新.
    查看全部
  • 观察者模式 定义:对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新. 观察者称为Observer 观察者观察的目标称为Subject 一个目标可以有任意个观察者对象.一旦目标的状态发生改变,观察者可以得到通知,各个观察者可以根据通知作出相应的响应,执行相应的业务逻辑处理.
    查看全部
    0 采集 收起 来源:课程简介

    2016-04-28

  • 适用情况
    查看全部
  • 观察者的缺点
    查看全部
    0 采集 收起 来源:观察者优缺点

    2016-04-24

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

    2016-04-24

  • 模型比较
    查看全部
  • 拉模型
    查看全部
  • 拉模型
    查看全部
  • 推模型
    查看全部
  • 实现观察者的两种方式
    查看全部
  • 观察者模式实现步骤
    查看全部

举报

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

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