设计模式(八):观察者模式

本文深入讲解观察者模式,一种常用的设计模式,用于实现对象间一对多的依赖关系。通过实例演示如何定义观察者接口和主题,以及如何在主体对象状态改变时通知所有观察者进行更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

设计模式(八):观察者模式

概述

观察者模式(Observer Pattern)定义了对象之间的一对多依赖,让多个观察者对象同时监听一个主体对象,主体对象发生变化时,它的所有依赖者(观察者)都会收到通知并更新。

场景介绍

定义一个观察者接口类,同时写两个实现类,作为两种观察者

public interface Observer {
    void update(String state);
}

//观察者1:开发人员
public class DevObserver implements Observer{
    @Override
    public void update(String state) {
        System.out.println("开发人员接收到项目状态变化为:"+state);
    }
}

//观察者2:项目经理
public class PMObserver implements Observer{
    @Override
    public void update(String state) {
        System.out.println("项目经理接收到项目状态变化为:"+state);
    }
}

定义一个抽象主题以及实现类

public interface Subject {
    void updateState(String state);

    void addObserver(Observer observer);

    void removeObserver(Observer observer);
}

//项目创建的主题实现
public class CreateProjectSubject implements Subject{

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

    @Override
    public void updateState(String state) {
        observers.forEach(observer->observer.update(state));

    }

    @Override
    public void addObserver(Observer observer){
        observers.add(observer);
        System.out.println("添加观察者成功");
    }

    @Override
    public void removeObserver(Observer observer){
        observers.remove(observer);
        System.out.println("删除观察者成功");
    }

}

测试类

public class ObserverTest {

    public static void main(String[] args) {
        CreateProjectSubject subject = new CreateProjectSubject();

        DevObserver dev = new DevObserver();
        PMObserver pm = new PMObserver();
        subject.addObserver(dev);
        subject.addObserver(pm);

        subject.updateState("已立项");
        /**
         * 添加观察者成功
         * 添加观察者成功
         * 开发人员接收到项目状态变化为:已立项
         * 项目经理接收到项目状态变化为:已立项
         */
    }

}

总结

事件机制就是观察者模式的一种体现。这种写法的好处在于扩展性好,观察者和被观察者之间建立了一个抽象的耦合。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值