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

下面是一个用Java实现观察者模式的示例代码:

主题接口 Subject.java

public interface Subject {
    public void registerObserver(Observer o);
    public void removeObserver(Observer o);
    public void notifyObservers();
}

具体主题类 ConcreteSubject.java

import java.util.ArrayList;

public class ConcreteSubject implements Subject {
    private ArrayList<Observer> observers;
    private int state;

    public ConcreteSubject() {
        observers = new ArrayList<Observer>();
    }

    public void registerObserver(Observer o) {
        observers.add(o);
    }

    public void removeObserver(Observer o) {
        int index = observers.indexOf(o);
        if (index >= 0) {
            observers.remove(index);
        }
    }

    public void notifyObservers() {
        for (Observer observer : observers) {
            observer.update(state);
        }
    }

    public void setState(int state) {
        this.state = state;
        notifyObservers();
    }
}

观察者接口 Observer.java

public interface Observer {
    public void update(int state);
}

具体观察者类 ConcreteObserver.java

public class ConcreteObserver implements Observer {
    private int observerState;

    public void update(int state) {
        observerState = state;
        System.out.println('Observer state updated to ' + observerState);
    }
}

测试代码 Test.java

public class Test {
    public static void main(String[] args) {
        ConcreteSubject subject = new ConcreteSubject();
        ConcreteObserver observer1 = new ConcreteObserver();
        ConcreteObserver observer2 = new ConcreteObserver();

        subject.registerObserver(observer1);
        subject.registerObserver(observer2);

        subject.setState(1);

        subject.removeObserver(observer1);

        subject.setState(2);
    }
}

输出结果:

Observer state updated to 1
Observer state updated to 1
Observer state updated to 2

在这个示例中,ConcreteSubject是具体主题类,实现了Subject接口,并提供了注册、删除和通知观察者的方法。ConcreteObserver是具体观察者类,实现了Observer接口,并在update方法中更新自己的状态。Test类是测试类,创建了一个主题对象和两个观察者对象,并测试了注册、删除和通知观察者的过程。

Java 观察者模式实现:代码示例及详解

原文地址: https://www.cveoy.top/t/topic/lLf2 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录