设计模式-观察者模式(发布订阅模式)

发布于:2025-07-03 ⋅ 阅读:(34) ⋅ 点赞:(0)

一、需要的类

一个发布类:里面一个是别人需要订阅的属性,以及用于存储订阅者的list,attach方法是往list集合里面添加元素,notifyObservers通知方法,也就是循环调用订阅者里面的一个方法,这个notifyObservers在set属性的时候调用
一个订阅者抽象类:发布者notifyObservers里面调用的那个方法,外加一个订阅者用于获取里面的内容
N个订阅者:在构造器中将自己注册到发布者集合中,外加一个接口实现内容

二、实现代码

发布类

public class Subject {
    private String state;
    private List<Observer> observers = new ArrayList<Observer>();
    public void attach(Observer observer)
    {
        observers.add(observer);
    }
    public void notifyObservers()
    {
        for (Observer observer : observers)
        {
            observer.update();
        }
    }
    public void setState(String state)
    {
        this.state = state;
        notifyObservers();
    }
    public String getState()
    {
        return state;
    }
}

订阅抽象类

public abstract class Observer {
    public Subject subject;
    public abstract void update();
}

订阅实现类1

public class BinaryObserver extends Observer{
    public BinaryObserver(Subject subject){
        this.subject = subject;
        this.subject.attach(this);
    }
    @Override
    public void update() {
        System.out.println("Binary String: " + this.subject.getState());
    }
}

订阅实现类2

public class OctalObserver extends Observer{
    public OctalObserver(Subject subject) {
        this.subject = subject;
        this.subject.attach(this);
    }
    @Override
    public void update() {
        System.out.println("Octal String: " + subject.getState());
    }
}

调用类

@SpringBootApplication
public class ObserverApplication {
    public static void main(String[] args) {
        Subject subject = new Subject();
        new BinaryObserver(subject);
        new OctalObserver(subject);
        subject.setState("10");
        subject.setState("20");
    }
}

三、结果

在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到