Java面试题:什么是观察者模式以及如何在Java中实现?

简介: Java面试题:什么是观察者模式以及如何在Java中实现?

观察者模式(Observer Pattern)是一种行为设计模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。当主题对象状态发生改变时,它的所有依赖者(观察者)都会自动收到通知并更新。

观察者模式主要由以下四个角色组成:

  1. Subject(主题):定义了被观察的对象,它把所有对观察者对象的引用保存在一个集合中,每个主题都可以有任意数量的观察者。主题提供一个接口,可以增加和删除观察者对象,主题在状态改变时,会通知所有观察者。
  2. Observer(观察者):为那些在主题发生改变时需要获得通知的对象定义一个接口。
  3. ConcreteSubject(具体主题):将观察者保存在一个集合中,并在状态发生改变时通知他们。
  4. ConcreteObserver(具体观察者):实现观察者接口,以便在主题的状态发生改变时更新自身状态。

在Java中实现观察者模式,我们可以使用Java内置的java.util.Observablejava.util.Observer接口。下面是一个简单的例子:

import java.util.Observable;
import java.util.Observer;

// 具体观察者
class ConcreteObserver implements Observer {
    private String name;

    public ConcreteObserver(String name) {
        this.name = name;
    }

    @Override
    public void update(Observable o, Object arg) {
        System.out.println(name + "收到通知:" + arg);
    }
}

// 具体主题
class ConcreteSubject extends Observable {
    private String state;

    public void setState(String state) {
        this.state = state;
        // 当状态改变时,通知所有观察者
        setChanged();
        notifyObservers(state);
    }

    public String getState() {
        return state;
    }
}

public class ObserverPatternDemo {
    public static void main(String[] args) {
        ConcreteSubject subject = new ConcreteSubject();
        Observer observer1 = new ConcreteObserver("观察者1");
        Observer observer2 = new ConcreteObserver("观察者2");
        
        subject.addObserver(observer1);
        subject.addObserver(observer2);
        
        subject.setState("新状态");
    }
}

在这个例子中,当ConcreteSubject的状态改变时,它会通知所有注册的观察者。每个观察者都会收到通知并更新自身状态。

注意,虽然Java内置了观察者模式的接口,但在实际开发中,我们可能会选择自己实现这些接口,以便更灵活地控制主题和观察者的行为。此外,还有其他一些库和框架也提供了观察者模式的实现,如RxJava等。

相关文章
|
8天前
|
存储 Java 程序员
Java面试题:请解释Java中的永久代(PermGen)和元空间(Metaspace)的区别
Java面试题:请解释Java中的永久代(PermGen)和元空间(Metaspace)的区别
37 11
|
8天前
|
缓存 监控 算法
Java面试题:描述Java垃圾回收的基本原理,以及如何通过代码优化来协助垃圾回收器的工作
Java面试题:描述Java垃圾回收的基本原理,以及如何通过代码优化来协助垃圾回收器的工作
35 8
|
6天前
|
NoSQL Java 应用服务中间件
Java高级面试题
Java高级面试题
|
6天前
|
网络协议 安全 前端开发
java面试题
java面试题
|
6天前
|
NoSQL Java 关系型数据库
常见Java面试题
常见Java面试题
|
SQL 缓存 安全
Java高频面试题目
面试时面试官最常问的问题总结归纳!
118 0
JAVA高频面试题目集锦(6)
JAVA高频面试题目集锦(6)
118 0
JAVA高频面试题目集锦(6)
|
存储 安全 Java
JAVA高频面试题目集锦(5)
JAVA高频面试题目集锦(5)
166 0
JAVA高频面试题目集锦(5)
|
算法 安全 Java
JAVA高频面试题目集锦(4)
JAVA高频面试题目集锦(4)
91 0
JAVA高频面试题目集锦(4)
|
存储 Java 对象存储
JAVA高频面试题目集锦(3)
JAVA高频面试题目集锦(3)
103 0
JAVA高频面试题目集锦(3)

热门文章

最新文章