自学内容网 自学内容网

设计模式--观察者模式

Java 设计模式中的观察者模式(Observer Pattern)是一种行为型设计模式,它定义了对象之间的一对多依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。

观察者模式的角色:

Subject(主题或被观察者):

  • 定义了观察者附着和分离的一个接口。
  • 维护一个观察者的列表。
  • 通常提供一个方法来通知观察者状态的变化。

Observer(观察者):

  • 定义一个更新自己的接口,在主题状态发生变化时被调用。

ConcreteSubject(具体主题):

  • 实现 Subject 接口或抽象类。
  • 维护状态,并且当状态发生变化时通知观察者。

ConcreteObserver(具体观察者):

  • 实现 Observer 接口或抽象类。
  • 更新自己的状态,通常会存储对主题对象的引用

使用场景:

  • 当一个对象的状态发生改变,所有依赖于它的对象都应得到通知并自动更新时。
  • 当一个对象必须通知其它对象,而它又不能假定其它对象是谁时。也就是说你不希望这些对象是紧密耦合的。
import java.util.ArrayList;
import java.util.List;

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

public interface Observer {
    void update(String message);
}

public class ConcreteSubject implements Subject {
    private List<Observer> observers = new ArrayList<>();
    private String message;

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

    @Override
    public void removeObserver(Observer o) {
        observers.remove(o);
    }

    @Override
    public void notifyObservers() {
        for (Observer observer : observers) {
            observer.update(message);
        }
    }

    public void setMessage(String message) {
        this.message = message;
        notifyObservers();
    }
}

public class ConcreteObserver implements Observer {
    @Override
    public void update(String message) {
        System.out.println("Received: " + message);
    }
}

public class Main {
    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.setMessage("Hello, observers!");
    }
}

在上面例子中,ConcreteSubject 是主题,它维护了一个观察者列表,并在状态改变时通知所有注册的观察者。ConcreteObserver 是观察者,它实现了 update 方法以响应主题的通知。
观察者模式有助于实现对象之间的解耦,使得对象之间的依赖关系更加灵活。


原文地址:https://blog.csdn.net/qq_29751083/article/details/141437685

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!