Java-23个设计模式 Observer

本文介绍了一种软件设计模式——观察者模式,通过定义对象间的一对多依赖关系来实现当一个对象的状态发生变化时,所有依赖于它的对象都会得到通知并被自动刷新。文中详细解释了观察者模式的组成部分,包括目标、观察者及其接口,并提供了具体的实现类示例。

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

Observer

定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动刷新(发布-订阅)

目标(通知的发送者)--->观察者(n),可以有任意数目的观察者订阅并接受通知。

① 创建观察者(接收通知状态的接口)Observer

public interface Observer {
    // 接收状态
    abstract void DoProgress(int state);
}

② 创建观察者实现类

public class FirstObserver implements Observer {
    @Override
    public void DoProgress(int state) {
        System.out.println("firstState:"+state);
    }
}
public class SecondObserver implements Observer {

    @Override
    public void DoProgress(int state) {
        System.out.println("secondState:"+state);
    }
}
public class ThirdObserver implements Observer {
    @Override
    public void DoProgress(int state) {
        System.out.println("thirdState:"+state);
    }
}

③ 创建目标(发布通知者接口)

/**
 * 被观察者接口
 * 添加,删除,通知观察者
 */
public interface Subject {
    void add(Observer observer);
    void del(Observer observer);
    void notifyObserver();
}

④ 目标实现类

/**
 * 被观察者实现类
 */
public class ConcreteSubject implements Subject {

    private int state;           // 观察者状态
    private List<Observer> list; // 观察者集合

    public ConcreteSubject(){
        list = new ArrayList<Observer>();
    }
    @Override
    public void add(Observer observer) {
        list.add(observer);
    }
    @Override
    public void del(Observer observer) {
        list.remove(observer);
    }
    // 通知观察者
    @Override
    public void notifyObserver() {
        for (Observer observer : list) {
            observer.DoProgress(state);
        }
    }

    public void setState(int state){
        // 状态更新
        this.state = state;
        // 通知所有观察者
        notifyObserver();
    }
}

⑤ 创建测试类

其中:Subject和Object接口稳定,而实现类变化大

Subject(目标):提供注册和删除观察者对象的接口

Observer(观察者):为那些在目标发生改变时须获得通知的对象定义一个更新接口(接收状态)

ConcreteSubject(具体目标):将有关状态存入各具体观察者对象,当它状态改变时,回调notify,发出通知

FirstObserver(具体观察者):存储于目标对象一致的状态state,实现Observer的更新接口使状态与具体目标一致

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值