java设计模式之八:观察者模式

本文详细介绍了观察者模式的概念及其在不同场景中的应用实例,包括天气变化显示、Android按钮点击及Spring配置加载等,并提供了具体的代码实现。

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

观察者模式作为设计模式之一:在各个项目中都有大量的引用,例如Listener。

观察者模式的关键是:被观察者产生了变化或者达到一定要求,就通知观察者。而不是观察者时刻去检查被观察者的状态。

举例一:天气变化,显示牌显示气温

天气:被观察者

显示牌:观察者。

气象站:客户端。

天气发生了变化,气象站作为客户端需要调用被观察者的提醒方法,提醒观察者。


举例二:Android鼠标点击按钮

被观察者:按钮

观察者:onClickListener

客户端:鼠标


举例三:spring启动,spring启动需要加载配置文件,会有n个ContextLoaderListener implments ServletContextListener

被观察者:spring配置文件

观察者:ContextLoaderListener

客户端:tomcat容器


类图:

观察者接口

interface  Observer{
    void update(String message);
}
观察者实现类:

class ConcreteObServer implements  Observer{
    @Override
    public void update(String message) {
        System.out.println(message);
    }
}

被观察者接口:

interface BeObserver{
    void addObserver(Observer observer);
    void remObserver(Observer observer);
    void notifyObserver(String message);

}

被观察者实现类

class ConcreteBeObServer implements  BeObserver{
    List<Observer> list=new ArrayList<>();          
    @Override
    public void addObserver(Observer observer) {      //添加观察者的操作由客户端调用
        list.add(observer);
    }

    @Override
    public void remObserver(Observer observer) {
        list.remove(observer);
    }

    @Override
    public void notifyObserver(String msg) {          //遍历观察者集合,通知观察者
        for(Observer observer:list)
            observer.update("天气改变了,变成了 "+msg);
    }
}


客户端代码:

public static void main(String[] args) {
        BeObserver beObserver = new ConcreteBeObServer();
        Observer o1 = new ConcreteObServer();
        Observer o2=new ConcreteObServer();
        beObserver.addObserver(o1);
        beObserver.addObserver(o2);
        int now = 23; //当前温度为23
        now++;//气温变化
        beObserver.notifyObserver(now + "");

    }

结果:

天气改变了,变成了 24
天气改变了,变成了 24


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值