Java基础 -- 观察者设计模式

    因为博主最近一遍回顾基础,一遍学新的知识点,因此发表的博客文章不会是按照顺序的发表的,不过是分好类的。java

    

    一块儿学习,一块儿进步。继续沉淀,慢慢强大。但愿这文章对您有帮助。如有写的很差的地方,欢迎评论给建议哈!设计模式

    初写博客不久,我是杨展浩。这是个人第十一篇博客。加油!!!ide

 

    今天来分享下Java基础知识 - - > 观察者设计模式!!!学习使用Java文档提供的关于观察者设计模式的一个接口 Observer 和一个类 Observable学习

    首先简单介绍下 观察者设计模式 的基本原理:该设计模式分两个角色,一个是观察者,一个是被观察者。测试

        举个例子:2个狗狗(逗逗、毛球) 和 他们的铲屎官。当铲屎官拿着狗粮而且命令逗逗和毛球坐好的时候,此时观察者就是逗逗和毛球(死盯着铲屎官拿着的那盘狗粮),所以被观察对象就是狗粮。this

   

原理大概就这样,下面上代码实验一波:spa

    编写一个被观察者的类(这里定义狗粮为被观察者):设计

package com.java8090.Watcher;

import java.util.Observable;

/**
 * @author zhanhao
 * @create 2019-09-10 14:11
 */
public class DogFood extends Observable {

    private Integer amount;

    public DogFood (Integer amount){
        System.out.println("狗粮初始化数量:" + amount);
        this.amount = amount;
    }

    public void setAmount(Integer amount){
        if(amount > this.amount){
            System.out.println("狗粮数量发生变化:" + amount);
            // 表示狗粮的量发生了变化
            super.setChanged();
            // 同步通知关注狗粮的观察者们
            super.notifyObservers(amount); 
        }
        this.amount = amount;
    }
}

    编写一个观察者类(这里定义狗狗为观察者):code

package com.java8090.Watcher;


import java.util.Observable;
import java.util.Observer;

/**
 * @author zhanhao
 * @create 2019-09-10 14:14
 */
public class DogFoodObserver implements Observer {

    private String name;

    public DogFoodObserver(String name){
        this.name = name;
    }

    @Override
    public void update(Observable o, Object arg) {
        if(o instanceof DogFood){
            DogFood dogFood = (DogFood) o;
            Integer dogFoodAmount = (Integer) arg;
            System.out.println("被关注的狗粮:" + dogFood + " 的量发生了变化:" + dogFoodAmount);
        }
    }
}

    

    测试类走起:server

package com.java8090.Watcher;

/**
 * @author zhanhao
 * @create 2019-09-10 14:09
 */
public class WatcherTest {
    public static void main(String[] args){
        // 定义被观察的对象 - -> 狗粮
        DogFood dogFood = new DogFood(0);

        // 定义观察者对象 - -> 关注狗粮的观察者
        DogFoodObserver dfo1 = new DogFoodObserver("关注狗粮的狗1号");
        DogFoodObserver dfo2 = new DogFoodObserver("关注狗粮的狗2号");
        DogFoodObserver dfo3 = new DogFoodObserver("关注狗粮的狗3号");

        // 将被观察者与观察者作关联
        dogFood.addObserver(dfo1);
        dogFood.addObserver(dfo2);
        dogFood.addObserver(dfo3);

        // 当狗粮的量发生变化的时候,就会去通知全部观察者
        dogFood.setAmount(100);
    }
}

    

    执行结果:

 

    总结下:对Java提供的一个接口 Observer 和 一个类 Observable 有个了解知道大概怎么用就好了。

    观察者设计模式开发:被观察者与观察者之间须要进行关联关系,当被观察者发生变化时,会同步通知观察者的。

相关文章
相关标签/搜索