为了账号安全,请及时绑定邮箱和手机立即绑定

观察者模式

GerryZhang JAVA开发工程师
难度中级
时长 1小时56分
学习人数
综合评分9.53
113人评价 查看评价
9.7 内容实用
9.6 简洁易懂
9.3 逻辑清晰
  • 基本骨架:

    Subject

    abstract class Subject {
        private List<Observer> observerList = new ArrayList<>();
        
        public void attach(Observer o){observerList.add(o);}
        public void detach(Observer o){observerList.remove(o);}
        public void inform(){observerList.forEach(o -> o.update(this));}
    }

    Observer

    interface Observer {
        void update(Subject subject);
    }


    简单模拟实现:

    具体事物

    class ConstructSubject extends Subject {
        private String status;
        
        public String getStatus(){return status;}
        
        public void setStatus(String status){
            this.status = status;
            this.inform(); // 事物发生变化,通知更新
        }
    }


    观察者实现

    class ConstructObserver implements Observer {
        String status;
    
        @Override
        public void update(Subject subject) {
            this.status = ((ConstructSubject)subject).getStatus();
        }
    }

    总结:Subject在设计模式中占主动地位,Observer可辅助Subject进行额外功能处理

    查看全部
  • Subject : 观察源事物,可添加或删除自身观察者

    Observer : 观察者,可接受事物的通知

    当事物发生更新变动,则通知观察者做相应处理,另事物状态与观察者状态保持一致

    查看全部
  • 创建、注册阶段

    查看全部
  • 客户端操作

    查看全部
  • 观察者实现的两种模式:

    https://img1.sycdn.imooc.com//5afdfb420001064505430200.jpg

    https://img1.sycdn.imooc.com//5afdfa6c0001b41905970322.jpg

    区别:

    1. 推模型假定目标知道观察者需要的数据

    2. 拉模型不知道目标对象需要什么数据,把自身传递给观察者,由观察者取值

    3. 推模型使观察者对象复用性比较差

    查看全部
  • 使用观察者模式的情况

    查看全部
  • 适用情况:

    查看全部
  • 优点: 1,观察者模式实现了观察者和目标之间的抽象耦合; 2,观察者模式实现了动态联动 3,观察者模式支持广播通信 缺点: 可能会引起无谓的操作---->引起误更新

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

    2018-04-03

  • Observable类的notifyObservers()方法只支持拉的方式,而另一个重载方法notifyObservers(Object content)方法两种方式(推的方式和拉的方式)都支持,所以在第二个时两种都生效

    查看全部
  • Java实现与自己实现的对比:

    查看全部
  • 利用Java提供的观察者模式:

    java.util.Observable类和java.util.Observer接口


    Java实现与自己实现的对比:

    查看全部
  • 观察者模型的实现方式:

    一、推模型

        目标对象主动向观察者推送目标的详细信息,推送的信息通常是目标对象的全部或部分数据


    二、拉模型

        目标对象在通知观察者的时候,只传递少量信息。

        若观察者需要更具体的信息,由观察者主动到目标对象中获取,相当于观察者从目标对象中拉数据。

        一般会把目标对象自身通过update方法传递到观察者


    比较:

    1、推模型是假定目标对象知道观察者需要的数据;拉模型不知道observer需要什么数据,因此把自身传给observer,由观察者来取值

    2、推模型使observer对象难以复用,拉模型传递的是目标对象本身,满足各种需要


    查看全部
  • 认识观察者模式:

    1、目标与观察者之间的关系

       一对一、一对多、多对一(观察者需要定义多个update方法用于区分)


    2、单项依赖

       观察者依赖目标,观察者一直在等待目标的通知


    3、命名建议

       观察者模式又被称为发布订阅模式

       ①目标接口的定义,名称加Subject后缀

       ②观察者接口的定义,名称加Observer后缀

       ③观察者接口的更新方法,名称为update


    4、触发通知的时机

       先修改状态再通知,否则会导致状态不一致


    5、观察者模式的调用顺序示意图

       ①准备阶段

    创建目标对象-》创建观察者对象-》向目标对象注册观察者对象

       ②运行阶段

    改变目标对象的状态-》通知所有注册的观察者对象进行相应的处理-》回调目标对象,获取相应的数据


    6、通知的顺序

       多个观察者之间是没有先后顺序的


    查看全部
  • 通用代码:

    查看全部
  • 观察者模式的设计图

    查看全部

举报

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

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

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