资讯专栏INFORMATION COLUMN

观察者模式(Observer)

jimhs / 1496人阅读

摘要:观察者模式一观察者模式定义定义对象间一种一对多的依赖关系,使得当每一个对象改变状态,则所有依赖于他的对象都会得到通知,并自动更新角色抽象观察者角色抽象被观察者角色具体观察者角色具体被观察者角色模式拉模式只通知是否变化而没有具体细节推模式会通

观察者模式

一. 观察者模式 1.1 定义

定义对象间一种一对多的依赖关系,使得当每一个对象改变状态,则所有依赖于他的对象都会得到通知,并自动更新.

1.2 角色

抽象观察者角色(IObserver).

抽象被观察者角色(ISubject).

具体观察者角色(Observer).

具体被观察者角色(Subject).

1.3 模式

拉模式:只通知是否变化而没有具体细节.

推模式:会通知具体细节.

二. 具体实现 2.1 创建观察者抽象接口

</>复制代码

  1. public interface IObserver {
  2. void update();
  3. }
2.2 创建具体观察者

</>复制代码

  1. public class ObserverA implements IObserver {
  2. @Override
  3. public void update() {
  4. System.out.println("ObserverA update ...");
  5. }
  6. }
  7. public class ObserverB implements IObserver {
  8. @Override
  9. public void update() {
  10. System.out.println("ObserverB update ...");
  11. }
  12. }
2.3 创建被观察者对象

</>复制代码

  1. public class Subject {
  2. List observerList = new ArrayList<>();
  3. public void addObserver(IObserver observer){
  4. if(!observerList.contains(observer)){
  5. observerList.add(observer);
  6. }
  7. }
  8. public void change (){
  9. System.out.println("Subject change ...");
  10. notifyObservers();
  11. }
  12. public void notifyObservers(){
  13. for(IObserver observer : observerList){
  14. observer.update();
  15. }
  16. }
  17. }
2.4 调用

</>复制代码

  1. public static void main(String[] args) {
  2. Subject subject = new Subject();
  3. IObserver observerA = new ObserverA();
  4. IObserver observerB = new ObserverB();
  5. subject.addObserver(observerA);
  6. subject.change();
  7. subject.addObserver(observerB);
  8. subject.change();
  9. }
2.5 输出

</>复制代码

  1. Subject change ...
  2. ObserverA update ...
  3. Subject change ...
  4. ObserverA update ...
  5. ObserverB update ...
三. 优缺点 3.1 优点

观察者与被观察者抽象耦合,容易扩展.

建立了一套触发机制.

3.2 缺点

循环依赖会导致系统崩溃.

观察者太多会浪费时间.

四. 源码

</>复制代码

  1. https://github.com/Seasons20/DisignPattern.git

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/69682.html

相关文章

  • 慕课网_《模式的秘密之察者模式》学习总结

    摘要:时间年月日星期二说明本文部分内容均来自慕课网。慕课网教学源码学习源码第一章观察者模式概述课程简介观察者模式的定义定义对象间的一种一对多的依赖关系。 时间:2017年08月29日星期二说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.com教学源码:https://github.com/zccodere/s...学习源码:https://github.com/z...

    iKcamp 评论0 收藏0
  • Java 设计模式察者模式

    摘要:三内置观察者模式了解内置观察者模式包内包含最基本的类与接口,这和上面的接口与接口很类似。根据具体的需求,如果内置的观察者模式不能满设计,那么我们可以像刚开始那样自己实现一套观察者模式。参考资料设计模式 一、了解观察者模式 1.1 什么是观察者模式 观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象状态改变时,它的所有依赖者都会收到通知并自动更新。 典型的问题比如报社,只要你是他...

    jsummer 评论0 收藏0
  • JS设计模式之Obeserver(察者模式、Publish/Subscribe(发布/订阅)模式

    摘要:观察者模式定义设计模式中对的定义一个对象称为维持一系列依赖于它观察者的对象,将有关状态的任何变更自动通知给它们。如图模式比较观察者模式则多了一个类似于话题调度中心的流程,发布者和订阅者解耦。 Obeserver(观察者)模式 定义 《js设计模式》中对Observer的定义:一个对象(称为subject)维持一系列依赖于它(观察者)的对象,将有关状态的任何变更自动通知给它们。 《设计模...

    荆兆峰 评论0 收藏0
  • 设计模式——察者模式

    摘要:简介观察者模式是行为型模式的一种,它定义了对象之间一种一对多的依赖关系,当一个对象发生改变时,依赖它的所有对象会被通知并且自动更新,它符合对象之间松耦合的设计原则。具体观察者各自实现接口方法,可以及时得到通知并更新。 1. 简介   观察者模式(Observer)是行为型模式的一种,它定义了对象之间一种一对多的依赖关系,当一个对象发生改变时,依赖它的所有对象会被通知并且自动更新,它符合...

    187J3X1 评论0 收藏0
  • 一起学设计模式 - 察者模式

    摘要:观察者模式是一种使用频率非常高的设计模式,无论是移动应用应用或者桌面应用,观察者模式几乎无处不在,它为实现对象之间的联动提供了一套完整的解决方案,凡是涉及到一对一或者一对多的对象交互场景都可以使用观察者模式。 观察者模式(Observer Pattern)属于对象行为型模式的一种,定义对象之间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。 ...

    cpupro 评论0 收藏0
  • 自我理解-察者Observer模式

    摘要:观察者模式观察者模式也可以成为发布订阅模式,此模式是对象之间的模式,对象之间呈现一种一对多的关系。其中的一是被观察者,多是观察者,故被观察者不能产生多个对象,只能有一个对象供观察者观察,所以在写被观察者的时候,需要使用到单例模式。 观察者(Observer)模式 观察者(Observer)模式 也可以成为发布订阅模式,此模式是对象之间的模式,对象之间呈现一种一对多的关系。其中的一是被观...

    xuweijian 评论0 收藏0

发表评论

0条评论

jimhs

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<