2019年3月30日 星期六

設計模式(8) 外觀模式 (Facade Pattern)

此篇介紹GoF設計模式(Design Pattern)的其中一種—外觀模式 (Facade Pattern)。


適用問題:

 想像家中的影音設備,我們要播放DVD看個電影,首先要開啟電視,然後開DVD播放器、設定電視輸出、放入光碟,這一系列的動作在我們要看電影時都要一一去做。
tv.on()
tv.setDvd()
dvdplayer.on()
dvdplayer.setInput(dvd)

  我們何不把這些必做的動作包裝起來,只要做出我想看DVD這個決定,這些細節就能幫我們處理好,而這就是外觀模式的理念,外觀模式為複雜的子系統提供簡單的介面。



外觀模式定義:
  "The Facade Pattern provides a unified interface to a set of interfaces in a subsystem. Facade defines a higher level interface that makes the subsystem easier to use." (外觀模式為子系統中的一組介面提供一個一致的介面,此模式定義了一個高層介面,這個介面使得這一子系統更加容易使用)




外觀模式Code (C++): 以上面的看DVD電影為例,建立HmoeTheaterFacade。
class HomeTheaterFacade{
    DvdPlayer *dvdplayer;
    Tv *tv;

    HomeTheaterFacade(DvdPlayer *player, Tv *t){
        dvdplayer = player;
        tv = t;
    }

    void watchMovie(Dvd *movie){
        tv->on();
        tv->setDvd();
        dvdplayer->on();
        dvdplayer->setInput(movie);
    }
}




參考資料:
  1. Head First Design Pattern
  2. 大話設計模式 (悅知文化出版)


沒有留言:

張貼留言