本篇是觀察者模式的第二個範例啦~
相較於天氣監測系統,這個應用可以說是非常簡單。
我們要做出一個可以幫使用者做決定的小程式,書中用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
因為讀的是原文版,所以難免會有翻譯詞不達意或是專有名詞上的差異,有錯誤的話歡迎在留言區一起交流!