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 有個瞭解知道大概怎麼用就好了。

    觀察者設計模式開發:被觀察者與觀察者之間須要進行關聯關係,當被觀察者發生變化時,會同步通知觀察者的。

相關文章
相關標籤/搜索