美文网首页java设计模式笔记
设计模式十九--观察者模式

设计模式十九--观察者模式

作者: 朽木亦自雕 | 来源:发表于2019-02-21 15:21 被阅读11次

定义

观察者模式的定义:定义对象之间一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并且被自动更新。

策略模式角色

一:抽象主题角色(Subject)
该角色又称为“被观察者”,可以增加和删除观察者对象。

public interface Subject{
  //登记观察者  
  public void attach(Observer observer);
  //删除观察者
  public void detach(Observer observer);
  //通知观察者
  public void notifyObserver();
}

二:抽象观察者角色(Observer)
该角色为所有的具体观察者定义一个接口,在得到主题的通知时更新自己。

public interface Observer{
    public void update();
}

三:具体主题(ConcreteSubject)
该角色又称为“具体被观察者”,它将有关状态存入具体被观察者对象,在具体的主题内部状态改变时,给所有登记过的观察者发出通知。

public class ConcreteSubject implements Subject{
    private Vector<Observer> observers = new Vector<Observer>();
    @Override
    private void attach(Observer observer){
      observers.add(observer);
    }
    
    @Override
    public void detach(Observer observer){
      observers.remove(observer);
    }

    @Override
    public void notifyObserver(){
        for(Observer observer : observers){
          observer.update();
        }
    }
    public Enumeration<Observer> observers(){
       return observers.elements();
    }

    public void change(){
      System.out.println("I am changed just now!");
      this.notifyObserver();
    }
}

四:具体观察者角色(ConcreteObserver)
该角色实现抽象观察者所要求的更新接口,以便使自身的状态与主题的资源相协调。

public class ConcreteObserver implements Observer{
  @Override
  public void update(){
    System.out.println("Yes, I received that !");
  }
}

调用示例代码

public class Test{
  public static void main(String [] args){
    Subject subject = new ConcreteSubject();
    Observer observer = new Observer();
    subject.attach(observer);
    subject.change();
  }
}

优点

1:观察者和被观察者之间是抽象耦合,易于扩展。
2:支持广播通信。

缺点

1:一个主题有过个直接或者间接的观察者,则广播会比较耗费时间,开发调试复杂。
2:发生循环依赖容易引起死循环。
3:异步通知需要保证消息投递顺序。
4:观察者无法知道被观察者内部是如何变化的。

应用场景

1:关联行为场景。
2:事件多级触发场景。
3:跨系统的消息交换场景,如消息队列的处理机制。

参考文献:设计模式(java)

相关文章

  • 观察者设计模式

    每周学点Java设计模式__观察者设计模式 本次继续更新java23中设计模式之一——观察者模式。 观察者模式(有...

  • RxJava基础—观察者模式

    设计模式-观察者模式 观察者模式:观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式...

  • 设计模式02-观察者者设计模式

    [toc] 设计模式02-观察者者设计模式 主要来源Head First设计模式(书)观察者设计模式是JDK中使用...

  • 11.9设计模式-观察者模式-详解

    设计模式-观察者模式 观察者模式详解 观察者模式在android中的实际运用 1.观察者模式详解 2.观察者模式在...

  • RxJava设计模式与原理

    标准观察者设计模式 RxJava是一种特殊的观察者模式,首先我们先来看标准的观察者设计模式。在标准观察者模式中,存...

  • 设计模式

    常用的设计模式有,单例设计模式、观察者设计模式、工厂设计模式、装饰设计模式、代理设计模式,模板设计模式等等。 单例...

  • Guava源码分析——EventBus

    EventBus的设计理念是基于观察者模式的,可以参考设计模式(1)—观察者模式先来了解该设计模式。 1、程序示例...

  • 设计模式之观察者模式

    设计模式之观察者模式 本篇是设计模式系列博客的第四篇,本篇主要学习设计模式中的第二个行为型模式---观察者模式。 ...

  • PHP设计模式之观察者模式

    PHP设计模式之观察者模式

  • Android中涉及的模式

    我的Java设计模式-建造者模式 我的Java设计模式-观察者模式 重学设计模式之单例模式

网友评论

    本文标题:设计模式十九--观察者模式

    本文链接:https://www.haomeiwen.com/subject/uzzqlqtx.html