適用問題:
想像家中的影音設備,我們要播放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. 大話設計模式 (悅知文化出版)
沒有留言:
張貼留言