观察者模式

定义

定了了对象之间的一对多依赖,这样依赖,当一个对象改变状态时,它的所有依赖者都会受到通知并自动更新

在具体实现中,开发者可以自己定义一整套观察者框架,也可以利用java提供的api实现这个模式

自定义实现观察者模式

观察者模式主要在解耦方面有巨大的作用,开发者可以自己实现整个观察者模式框架,一般会实现了观察者接口,这个接口的必需的一个方法是提供 主题(被观察者)状态发生变化时,需要调用的,像Observer接口中的receiverNews方法

public interface Observer {

    public void receiverNews(News news);

}

主题接口一般最少提供三个方法,一个观察者注册接口,一个移除接口,一个通知接口。
所有主题类必需实现该接口。具体的代码见我的github代码

依赖JDK实现观察者模式

利用java api
被观察者实现类需要extends Observable,观察者需要implements Observer接口

被观察者发布新状态需要先调用setChanged(),然后调用notifyObservers()。这里setChanged方法存在的意义是为了 规避当被观察者数据虽然更新了,但数据其实是没变的。例如一个天气系统,第一次被观察者更新温度数据21°,通知其订阅者,订阅者收到消息后作出相应的改变,第二次被观察者更新的温度数据还是21°,这时候就没必要在发送(当然这个根据你的业务,如果系统要求不变也得发送那你就可以忽视了)。
notifyObservers方法是通知所有订阅者的方法,可以将发送的数据放在这个方法里。

所有的观察者都要实现observer接口并且必需复写其update方法,

@Override
    public void update(Observable topic, Object content) {

        if(topic instanceof NewsOfficeJDK){
            System.out.println("alice received a news about "+ ((News)content).getTitle()+" from "+((NewsOfficeJDK)topic).getName());
        }else if(topic instanceof JavaOfficeJDK){
            System.out.println("alice received a news about "+ ((News)content).getTitle()+" from Java ");
        }

    }

第一个参数Observable是消息的发送者,第二个参数时消息内容。
感觉利用jdk实现观察者模式是很不方便的,并且被观察者必需继承Observable类,其实自己实现这个模式代价可以忽略不计,而且可以随意修改。

观察者模式提示是挺好理解的,就简答的讲述这么多。

我的示例代码
https://github.com/yangzhenkun/DesignPatternLearn/tree/master/src/main/java/com/yasin/DesignPatternLearn/ObserverPattern

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值