Java观察者模式Demo讲解

观察者模式是一种设计模式,用于实现对象之间的发布-订阅机制。在这个例子中,`PublicObject`作为公众号,实现了`Subject`接口,允许`User1`和`User2`(实现了`Observer`接口的用户类)订阅并接收通知。当`PublicObject`发出通知时,所有已订阅的用户将接收到通知并执行相应操作。这种模式常用于解耦系统组件,使得发送方和接收方之间不需要直接交互。
摘要由CSDN通过智能技术生成
  1. 观察者模式是用来干嘛的?
  2. 观察者模式有那些角色?
  3. 观察者模式是怎样实现的?

观察者模式是用来干嘛的?

如果你知道消息队列那你可以跳过这一段了。
我们都知道公众号,用户只要关注了公众号就可以收到公众号发来的通知。那观察者这个设计模式就是用来干这个的

观察者模式有那些角色?

先甩图
在这里插入图片描述
看不懂没关系,你可以跟着我敲一遍,敲完实例你就可以理解这张图了
Subject(被观察者接口也可以叫做订阅)
有时也叫Observable,其是一个接口,定义了观察者如何订阅与取消订阅的方法(添加观察者与移除观察者),以及当状态发生变化时的通知方法
ConcreteSunject(被观察者接口的实现)
实现Subject,持有Observer的集合
Observer(观察者的抽象)
定义了如何接收事件通知的方法。
ConcreteObserver(观察者实现类)

观察者模式是怎样实现的?

在这里插入图片描述
PublicObject 充当公众号的角色
User1 充当用户1的角色
User2 充当用户2的角色

被观察者抽象类

import java.util.ArrayList;
import java.util.List;

// 主题抽象类
public abstract class Subject {
    // list用来存储观察者
    List<Observer> observers =new ArrayList<>();

    // 添加观察者
    void addObServer(Observer obServer){
        observers.add(obServer);
    }
    // 移除观察者
    void removeObServer(Observer obServer){
        observers.remove(obServer);
    }
    // 通知所有观察者
   public abstract void notifyAllObServer();
}

观察者接口类

// 观察者接口
public interface Observer {
    // 接收事件通知的方法 
    void notifyToDo();
}

公众号类继承被观察者抽象(被观察对象)

// 公众号
public class PublicObject extends Subject {
    @Override
    public void notifyAllObServer() {
        // 通知所有观察者
        for (Observer obServer : observers) {
            obServer.notifyToDo();
        }
        System.out.println("通知发送完毕");
    }
}

用户类1实现观察者接口(观察者对象)

public class User1 implements Observer {
    @Override
    public void notifyToDo() {
        System.out.println("用户1开始执行通知");
    }
}

用户类2实现观察者接口(观察者对象)

public class User2 implements Observer {
    @Override
    public void notifyToDo() {
        System.out.println("用户2开始执行通知");
    }
}

然后我们用一个启动类来实现一下观察者模式

// 启动类
public class Start {
    public static void main(String[] args) {
        User1 user1 = new User1();
        User2 user2 = new User2();
        PublicObject publicObject = new PublicObject();
        // 添加观察者user1
        publicObject.addObServer(user1);
        // 添加观察者user2
        publicObject.addObServer(user2);
        // 发出通知
        publicObject.notifyAllObServer();
    }
}

观察者模式实现完毕!代码很简单,但是这个设计模式不简单!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值