美文网首页
Java实现观察者模式

Java实现观察者模式

作者: 夜舒 | 来源:发表于2017-08-31 21:39 被阅读0次

观察者,最简单的来说就是,当被观察者做出了某种举动,观察者能够第一时间知道被观察者做出的举动。
举个栗子:现在附近开了一家超市,但是呢!平常的时候都是有点小贵的,只有偶尔的时候才会有很便宜的东西,当然超市也知道,so,超市想着我想让这附近的人都能够第一时间知道我们超市某件商品降价了。此刻,超市就成了被观察者,而周围的人都成了观察者。
超市具体要怎么做我就不知道了!
下面开始讲的就是Java!

观察者模式.png

图可能画的有点问题,虚线没找到,等下次在改啊!汗!

图上画的是什么呢??
接口

Subject
Observable

Market
Observer

上面画的还是很清楚的,但是我还是贴段代码,看看Subject 是什么情况,就像图上画的那样,三个方法,一个订阅,一个取消,一个通知,

public interface Subject {

    void registerObservable(Observable observable);

    void removeObservable(Observable observable);

    void notifyObservable();
}

在看看Market里面有什么东西

public class Market implements Subject {

    private List<Observable> observableList = new ArrayList<>();

    private String goods;
    private BigDecimal price;

    public void updateGoods(String goods,BigDecimal price){
        this.goods = goods;
       this.price = price;
        notifyObservable();
    }

    public String getUpdateInfo(){
        return "商品名:"+goods+"\n价格"+price;
    }


    @Override
    public void registerObservable(Observable observable) {
        observableList.add(observable);
    }

    @Override
    public void removeObservable(Observable observable) {
        observableList.remove(observable);
    }

    @Override
    public void notifyObservable() {
        for(Observable observable:observableList){
            observable.update();
        }
    }
}

最最最重要的是Market中保存了所有的Observable,其实就是说作为商场,我知道有多少人给了我联系方式,好通知周围的小伙伴们。

之后的Observer 就简单了,只要订阅了商场,就能得到消息

public class Observer implements Observable {
    private Market market;
    public Observer(Market market){
        this.market = market;
     //most important 
       market.registerObservable(this);
    }
    @Override
    public void update() {
        System.out.println(getClass().getName()+market.getUpdateInfo());
    }
}

最后当然是贴上main函数的代码以及运行时的结果咯

public class Main {
    public static void main(String[] args) {
        Market market = new Market();
        Observer observer = new Observer(market);
        market.updateGoods("牛肉", BigDecimal.valueOf(3.5));
        market.removeObservable(observer);
        market.updateGoods("牛肉", BigDecimal.valueOf(3.6));
        market.registerObservable(observer);
        market.updateGoods("牛肉", BigDecimal.valueOf(3.7));
    }
}
image.png

OK,that`s it.
如果觉得我写的有什么问题!欢迎大家指正!

相关文章

  • 23种设计模式之观察者模式

    观察者模式底层实现 使用java.util.Observable,java.util.Observer实现观察者模...

  • 六、JDK自带观察者

    利用Java提供的Observer接口和Observable类实现观察者模式 对于观察者模式,其实Java已经为我...

  • 观察者模式

    下面我们使用Java内置的类实现观察者模式:

  • [笔记]Observer和EventListener

    Java有两个订阅-分发模式的实现: Java.util.Observer 观察者观察者相对简洁,只有观察者和被观...

  • 观察者设计模式

    每周学点Java设计模式__观察者设计模式 本次继续更新java23中设计模式之一——观察者模式。 观察者模式(有...

  • Rxjava3使用教程:介绍和基本使用

    一、简介 RxJava是响应式编程(Reactive Extensions)的java实现,它基于观察者模式的实现...

  • RxJava 2.x知识笔记

    观察者模式的运用 传统的Java观察者模式可以参考此篇博客:Java观察者模式案例简析 RxJava 是基于Jav...

  • java建造者模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java单例模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java外观模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

网友评论

      本文标题:Java实现观察者模式

      本文链接:https://www.haomeiwen.com/subject/doscjxtx.html