设计模式——观察者模式Observer

Q:观察者模式属于哪一类设计模式

A:观察者模式属于行为学模式

Q:什么是观察者模式

A:当一个对象的状态发生改变时,所有依赖它的对象都得到通知,并自动更新

观察者模式解析:报纸类维护了一个订阅者数组,我们可以通过报纸类遍历订阅者数组来通知所有订阅者

订阅者类

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

订阅者实现类

public class SubscriberImpl implements Subscriber {
    private String name;

    @Override
    public void update(String message) {
        System.out.println(name + "---接收到消息:" + message);
    }
}

报纸类

public interface NewsPaper {
    void addSubscriber(Subscriber subscriber);//添加订阅者
    void removeSubscriber(Subscriber subscriber);//移除订阅者
    void notifySubscriber(String message);//通知订阅者
}

报纸实现类

public class NewsPaperImpl implements NewsPaper {
    private List<Subscriber> subscribers = new ArrayList<>();

    @Override
    public void addSubscriber(Subscriber subscriber) { subscribers.add(subscriber); }

    @Override
    public void removeSubscriber(Subscriber subscriber) { subscribers.remove(subscriber); }

    @Override
    public void notifySubscriber(String message) {
        for (Subscriber s : subscribers) {
            s.update(message);
        }
    }
}

演示类

public class Demo {
    public static void main(String[] args) {
        NewsPaperImpl newsPaper = new NewsPaperImpl();
        SubscriberImpl subscriber1 = new SubscriberImpl("李老头");
        SubscriberImpl subscriber2 = new SubscriberImpl("王奶奶");

        newsPaper.addSubscriber(subscriber1);
        newsPaper.addSubscriber(subscriber2);

        newsPaper.notifySubscriber("今天的报纸收到了!");

        newsPaper.removeSubscriber(subscriber1);

        newsPaper.notifySubscriber("明天的报纸还是这个点到!");
    }
}

演示结果

相关推荐

  1. 设计模式-观察模式 Observer

    2024-03-28 06:10:01       24 阅读
  2. 设计模式观察模式Observer Pattern

    2024-03-28 06:10:01       25 阅读
  3. 设计模式-观察模式Observer Pattern)

    2024-03-28 06:10:01       27 阅读
  4. 设计模式观察模式Observer Pattern)

    2024-03-28 06:10:01       25 阅读
  5. 设计模式】12、observer 观察模式

    2024-03-28 06:10:01       10 阅读
  6. 设计模式——观察模式Observer

    2024-03-28 06:10:01       9 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-28 06:10:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-28 06:10:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-28 06:10:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-28 06:10:01       18 阅读

热门阅读

  1. 面试中常被问到的数据库面试题及答案

    2024-03-28 06:10:01       23 阅读
  2. React 18中hook函数详解之useRef

    2024-03-28 06:10:01       21 阅读
  3. React或Vue与后端通讯的跨域问题处理

    2024-03-28 06:10:01       16 阅读
  4. 【React】React 内置 Hook

    2024-03-28 06:10:01       18 阅读
  5. SpringBoot + Redis + Lua = 王炸!

    2024-03-28 06:10:01       20 阅读
  6. Encoding类

    2024-03-28 06:10:01       17 阅读
  7. axios

    axios

    2024-03-28 06:10:01      20 阅读
  8. SpringMVC基础Controller

    2024-03-28 06:10:01       17 阅读
  9. 软件测试基础(2)

    2024-03-28 06:10:01       16 阅读
  10. 【剑指offer】75. 和为S的两个数字

    2024-03-28 06:10:01       20 阅读
  11. 课时77:流程控制_until循环_until基础

    2024-03-28 06:10:01       19 阅读
  12. flutter boost 如何从native跳转到flutter页面

    2024-03-28 06:10:01       20 阅读
  13. Selenium 学习(0.22)——软件测试之小结

    2024-03-28 06:10:01       15 阅读
  14. 深入浅出(四)VTK库—3D可视化

    2024-03-28 06:10:01       17 阅读