设计模式——观察者模式

本文介绍了观察者模式中的核心角色,包括主题(Subject)、观察者(Observer)、具体主题(ConcreteSubject)和具体观察者(ConcreteObserver),并通过一个演出信息订阅的示例展示了如何使用这些概念。
摘要由CSDN通过智能技术生成

观察者模式包含以下几个核心角色:

  1. 主题(Subject):也称为被观察者或可观察者,它是具有状态的对象,并维护着一个观察者列表。主题提供了添加、删除和通知观察者的方法。
  2. 观察者(Observer):观察者是接收主题通知的对象。观察者需要实现一个更新方法,当收到主题的通知时,调用该方法进行更新操作。
  3. 具体主题(Concrete Subject):具体主题是主题的具体实现类。它维护着观察者列表,并在状态发生改变时通知观察者。
  4. 具体观察者(Concrete Observer):具体观察者是观察者的具体实现类。它实现了更新方法,定义了在收到主题通知时需要执行的具体操作。

例子:

我们都订阅了一些演出信息,当演出更新的时候,订阅的人也会收到信息。

public interface Subject {
    void addObserve(Observer observer);
    void deleteObserve(Observer observer);
    void notification(String message);
}
public class NotificationPlatFormSubject implements Subject{

    protected List<Observer> observers = new ArrayList<Observer>();


    @Override
    public void addObserve(Observer observer) {
        observers.add(observer);
    }

    @Override
    public void deleteObserve(Observer observer) {
        System.out.println("退订中");
        observers.remove(observer);
        System.out.println("退订成功");
        System.out.println("-------------");
    }

    @Override
    public void notification(String message) {
        for (Observer observer : observers) {
            observer.update(message);
        }
    }
}
public interface Observer {
    void update(String message);
}
public class Observer1 implements Observer{
    @Override
    public void update(String message) {
        System.out.println("订阅中,observer1 收到信息:");
        System.out.println(message);
        System.out.println("--------------------------");
    }
}
public class Observer2 implements Observer{
    @Override
    public void update(String message) {
        System.out.println("订阅中,observer2 收到信息");
        System.out.println(message);
        System.out.println("------------------");
    }
}
public class Client {
    public static void main(String[] args) {
        Observer observer1 = new Observer1();
        Observer observer2 = new Observer2();
        Subject notificationPlatFormSubject = new NotificationPlatFormSubject();
        notificationPlatFormSubject.addObserve(observer1);
        notificationPlatFormSubject.addObserve(observer2);
        String message = "xxx演出将在三天后开始发售!";
        notificationPlatFormSubject.notification(message);

        notificationPlatFormSubject.deleteObserve(observer1);
        String message2 = "xxx有新上线场次注意查收";
        notificationPlatFormSubject.notification(message2);
    }
}

结果

订阅中,observer1 收到信息:
xxx演出将在三天后开始发售!
--------------------------
订阅中,observer2 收到信息
xxx演出将在三天后开始发售!
------------------
退订中
退订成功
-------------
订阅中,observer2 收到信息
xxx有新上线场次注意查收
------------------

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值