11.1 观察者模式(Observer) :自定义主题

本文深入探讨了观察者模式(Observer)的基本概念与实现原理,详细介绍了主题与观察者之间的1:N依赖关系,以及如何通过自定义主题来实现信息的更新与通知。文中提供了具体的Java代码示例,展示了观察者模式在实际编程中的应用。

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

11.1 观察者模式(Observer) :自定义主题

I.定义了对象1:N的依赖关系,这样当一个对象的主题发生变化时,所有依赖于这个对象的相关对象都会被更新;
II.被观察的对象叫做Subject(主题)
III.实现方式有push和pull(push可能导致接口不能重用,pull是观察者主动查询信息,导致信息不及时)

使用接口定义的主题
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;

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

/**
 * 观察者 观察的对象是T
 *
 * @param <T>
 */
interface IObserver<T> {
    void update(T t);
}

/**
 * 观察的主题,
 * 提供对观察者S的操作 - add remove
 */
interface ISubject<S> {
    void addObserver(S s);

    void removeObserver(S s);

    void notifyObservers();//提醒观察者
}

@Slf4j
class ObserverIpml implements IObserver<String> {
    @Override
    public void update(String s) {
        log.info("message:{}", s);
    }
}

@Slf4j
class SubjectImpl implements ISubject<IObserver> {
    private List<IObserver<String>> observers = new ArrayList<>();

    @Override
    public void addObserver(IObserver iObserver) {
        this.observers.add(iObserver);
    }

    @Override
    public void removeObserver(IObserver iObserver) {
        this.observers.remove(iObserver);
    }

    @Override
    public void notifyObservers() {
        this.observers.forEach(vo -> {
            vo.update("message");
        });
    }
}

public class ObserverModel {
    @Test
    public void test(){
        IObserver observer = new ObserverIpml();
        IObserver observer2 = new ObserverIpml();
        ISubject iSubject = new SubjectImpl();
        iSubject.addObserver(observer);
        iSubject.addObserver(observer2);
        iSubject.notifyObservers();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值