網頁

2015年11月4日 星期三

[Design Pattern] 表象模式 Facade Pattern

身為物件導向開發者的你,常需要呼叫物件中的方法,來做一些事情,但有時執行一個動作需要用到一個物件中的許多方法,甚至是多個物件.



譬如說...有一個動作叫做 "在家觀賞DVD"

你需要做的動作...
  1. 打開電視
  2. 打開DVD播放器
  3. 將電視輸入切換到DVD播放
  4. 將音量轉成20
  5. 開始播DVD
在這裡 你就使用到 

TV物件
  1. 打開電視方法
  2. 切換到DVD播放方法
  3. 音量轉成20

 DVD 物件
  1. 打開DVD播放器方法
  2. 開始播DVD方法
--------------------------------------------------------------------------------------------------------------------

轉換成 Java

TV.start();
DVD.start();
TV.setInput(dvd);
TV.setSound(20);
DVD.play(movie);

每看一次DVD你都要寫這麼多程式碼.

也許你會想說,我寫成一個方法就好啦,全部包在裡面,這樣就可以一直呼叫囉.
沒錯!!! 正是要這麼做.

只是我們寫成 "家庭戲院" 類別,這樣可以建立物件跟呼叫使用 "在家觀賞DVD" 方法

// 家庭戲院類別
public class HomeTheaterFacade {
    TV tv;
    DVD dvd;

    // 取得TV、DVD物件,從建構子傳入
    public HomeTheaterFacade(TV tv, DVD dvd) {
        this.tv = tv;
        this.dvd = dvd;
    }

    // 看電影方法
    public void watchMovie(String movie){
        tv.start();
        dvd.start();
        tv.setInput(TV.DVD_mode);
        tv.setSound(20);
        dvd.play(movie);
    }

    // 結束電影方法
    public void endMovie(){
        dvd.stop();
        dvd.eject();
        dvd.off();
        tv.setInput(TV.TV_mode);
        tv.off();
    }
}

--------------------------------------------------------------------------------------------------------------------

如此一來,你只要執行一個方法就可以"在家觀賞DVD",是不是很方便呢?

沒有留言:

張貼留言