观察者模式

2024-01-02 16:55:02

它允许一个对象(称为主题或可观察对象)维护一系列依赖于它的对象(称为观察者),并在自身状态变化时通知这些观察者。这种模式用于建立对象之间的一对多依赖关系,使得一个对象的状态变化能够自动通知所有依赖它的对象。

主要角色:
主题(Subject): 被观察的对象,它维护着一系列观察者对象的引用,提供注册、删除和通知观察者的方法。
观察者(Observer): 依赖于主题状态的对象。当主题状态发生变化时,观察者会收到通知并执行相应的更新。
工作原理:
主题维护了一个观察者列表,并提供了方法用于注册、删除和通知观察者。
观察者通常定义了一个更新方法(比如 update()),主题在状态改变时调用观察者的更新方法来通知它们状态的变化。

我的理解是:
他和发布订阅者模式类似,都是当对象状态发生变化时,由发布者通知订阅者。

public class MyTestDemo implements Callback{
    public static void main(String[] args) {
        Publisher publisher = new ConcretePublisher();
        Subcriber subcriber1 = new ConcreteSubcriber();
        Subcriber subcriber2 = new ConcreteSubcriber();
        publisher.add(subcriber1);
        publisher.add(subcriber2);
        publisher.notifyAllSubscriber();
    }
}
interface Publisher{
    public List<Subcriber> get();

    public void add(Subcriber subcriber);

    public void notifyAllSubscriber();
}
class ConcretePublisher implements Publisher{

    List<Subcriber> lists = new ArrayList<>();
    @Override
    public List<Subcriber> get() {
        return this.lists;
    }

    @Override
    public void add(Subcriber subcriber) {
        lists.add(subcriber);
    }

    @Override
    public void notifyAllSubscriber() {
        for (int i = 0; i < lists.size(); i++) {
            lists.get(i).update();
        }
    }
}

interface Subcriber{
    public void update();
}

class ConcreteSubcriber implements Subcriber{

    @Override
    public void update() {
        System.out.println("事件通知");
    }
}

文章来源:https://blog.csdn.net/weixin_44050153/article/details/135343321
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。