Java设计模式之四:观察者模式

简介: 观察者模式使我们在日常项目实践中比较常用的设计模式,它体现了代码模块的高内聚低耦合的特性,我们可以方便的使用它进行代码扩展。

引言

本文主要介绍观察者模式,它是一种行为类的设计模式。适合一对多的适用场景。

  • 观察者模式介绍
  • 代码示例
  • 总结


一、观察者模式介绍

观察者模式是一种对象行为模式。它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新

所谓观察这模式,按照我自己的理解就是打小报告的模式。估计大家都记得我们上小学的时候班里面总有些人喜欢喝老师打小报告班级里有点什么小动静,老师都会通过打小报告的人获取到消息。

二、代码示例

观察者模式的主要设计四个角色,如下所示:

  1. 抽象被观察者;
  2. 被观察者实现;
  3. 抽象观察者;
  4. 观察者实现;

UML类图如下所示:

image.png

抽象被观察者:

interface ISubject {
  List<Observer> addObserver(Observer observer);
  void notifyObserver();
}

被观察者实现:

public class SubjectImpl implements ISubject {
  List<Observer> observerList = Lists.newArrayList();
  @Override
  public List<Observer> addObserver(Observer observer) {
    return observerList.add(observer);
  }
  @Override
  public void notifyObserver() {
    for(Observer observer : observerList ) {
      observer.updateSomething(); 
    }
  }
}

抽象观察者:

interface IObserver{
  void updateSomething();
}

观察者实现:

public class ObserverImpl implements IObserver{
  @Override
  public void updateSomething() {
  System.out.println("被观察者做了啥,我得做啥");
}
}

使用场景代码:

public class Main{
    public static void main(String[] args) {
    IObserver observer = new ObserverImpl();
    ISubject subject = new SubjectImpl();
    subject.addObserver(observer);
    subject.notifyObserver();
}
}

三、总结

观察者模式使我们在日常项目实践中比较常用的设计模式,它体现了代码模块的高内聚低耦合的特性,我们可以方便的使用它进行代码扩展。

相关文章
|
18天前
|
设计模式 Java 开发者
设计模式揭秘:Java世界的七大奇迹
【4月更文挑战第7天】探索Java设计模式:单例、工厂方法、抽象工厂、建造者、原型、适配器和观察者,助你构建健壮、灵活的软件系统。了解这些模式如何提升代码复用、可维护性,以及在特定场景下的应用,如资源管理、接口兼容和事件监听。掌握设计模式,但也需根据实际情况权衡,打造高效、优雅的软件解决方案。
|
19天前
|
设计模式 存储 Java
23种设计模式,享元模式的概念优缺点以及JAVA代码举例
【4月更文挑战第6天】享元模式(Flyweight Pattern)是一种结构型设计模式,旨在通过共享技术有效地支持大量细粒度对象的重用。这个模式在处理大量对象时非常有用,特别是当这些对象中的许多实例实际上可以共享相同的状态时,从而可以减少内存占用,提高程序效率
35 4
|
19天前
|
设计模式 Java 中间件
23种设计模式,适配器模式的概念优缺点以及JAVA代码举例
【4月更文挑战第6天】适配器模式(Adapter Pattern)是一种结构型设计模式,它的主要目标是让原本由于接口不匹配而不能一起工作的类可以一起工作。适配器模式主要有两种形式:类适配器和对象适配器。类适配器模式通过继承来实现适配,而对象适配器模式则通过组合来实现
30 4
|
23天前
|
设计模式 Java 数据库
Java设计模式精讲:让代码更优雅、更可维护
【4月更文挑战第2天】**设计模式是解决软件设计问题的成熟方案,分为创建型、结构型和行为型。Java中的单例模式确保类仅有一个实例,工厂方法模式让子类决定实例化哪个类。适配器模式则协调不兼容接口间的合作。观察者模式实现了一对多依赖,状态变化时自动通知相关对象。学习和适当应用设计模式能提升代码质量和可维护性,但需避免过度使用。设计模式的掌握源于实践与不断学习。**
Java设计模式精讲:让代码更优雅、更可维护
|
18天前
|
设计模式 监控 Java
设计模式 - 观察者模式(Observer):Java中的战术与策略
【4月更文挑战第7天】观察者模式是构建可维护、可扩展系统的关键,它在Java中通过`Observable`和`Observer`实现对象间一对多的依赖关系,常用于事件处理、数据绑定和同步。该模式支持事件驱动架构、数据同步和实时系统,但需注意避免循环依赖、控制通知粒度,并关注性能和内存泄漏问题。通过明确角色、使用抽象和管理观察者注册,可最大化其效果。
|
1天前
|
设计模式 算法 Java
[设计模式Java实现附plantuml源码~行为型]定义算法的框架——模板方法模式
[设计模式Java实现附plantuml源码~行为型]定义算法的框架——模板方法模式
|
1天前
|
设计模式 JavaScript Java
[设计模式Java实现附plantuml源码~行为型] 对象状态及其转换——状态模式
[设计模式Java实现附plantuml源码~行为型] 对象状态及其转换——状态模式
|
1天前
|
设计模式 存储 JavaScript
[设计模式Java实现附plantuml源码~创建型] 多态工厂的实现——工厂方法模式
[设计模式Java实现附plantuml源码~创建型] 多态工厂的实现——工厂方法模式
|
1天前
|
设计模式 Java Go
[设计模式Java实现附plantuml源码~创建型] 集中式工厂的实现~简单工厂模式
[设计模式Java实现附plantuml源码~创建型] 集中式工厂的实现~简单工厂模式
|
1天前
|
设计模式 存储 前端开发
Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式
Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式