本篇是觀察者模式的第二個範例啦~
相較於天氣監測系統,這個應用可以說是非常簡單。
我們要做出一個可以幫使用者做決定的小程式,書中用JAVA的Swing,我這邊就是用我的方式完成😂
這個應用要有一個按鈕 Should I do it? ,一旦按下就會有兩個角色替你做決定。不意外的,一是天使,另一個就是惡魔。
首先我們先把監聽者 Listener() 介面定義好,然後用天使 Angel() 跟惡魔 Devil() 來實作。
public interface Listener {
    public void getOpinion();
}
public class Angel implements Listener{
    public Angel(){
        System.out.println("I'm angel.");
    }
    public void getOpinion(){
        System.out.println("You better think twice......");
    }
}
public class Devil implements Listener{
    public Devil(){
        System.out.println("I'm devil.");
    }
    public void getOpinion(){
        System.out.println("Just DO IT !");
    }
}
接著就是關鍵的那個按鈕 Button():
public class Button {
    private Listener role;
    public void makeDecision(int r){
        if(r % 2 == 0){            
           role = new Angel();
        }
        else{
            role = new Devil(); 
        }
    } 
    public void pressBtn(){
        System.out.println("Should I do it?");
        Random rand = new Random();
        int randNum = rand.nextInt(100);
        
        makeDecision(randNum);
        role.getOpinion();
    }
}
為了達到隨機的目的,每次按下按鈕 pressBtn() 後都會產生一個隨機數,隨機數是偶數的話就是天使的意見,奇數就是惡魔的意見。
public class lifeChangeApp {
    public static void main(String arg[]){    
        Button btn = new Button();
        btn.pressBtn();
        btn.pressBtn();
        btn.pressBtn();
    }
}
差點忘記放輸出結果
https://github.com/changtintin/Design-Pattern/tree/master/Ch2/Java/swing
Disclaimer
因為讀的是原文版,所以難免會有翻譯詞不達意或是專有名詞上的差異,有錯誤的話歡迎在留言區一起交流!