定義一個更高層的介面,使子系統更加容易使用,提供更簡單的方法與系統交流
- 意圖:希望簡化原有系統的使用方式
- 問題:只需要使用某個複雜系統的子集,或者需要以一種特殊的方式與系統交流
- 解決方案:façade為原有系統的客戶提供了一個新的介面
- 參與者與協作者:為客戶提供一個簡化介面,更容易使用
- 效果:façade模式簡化了對所需子系統的使用過程,由於façade並不提供完整的功能,客戶可能無法使用某些功能
- 實作:定義一個或多個具備所需介面的新類別;讓新的類別使用原有的系統
下面有四個class 分別是家庭Facade控制器,風扇控制器,燈光控制器,電視控制器
public class HomeDeviceFacade { private FanController FC = new FanController(); private LightController LC = new LightController(); private TVController TC = new TVController(); public void DeviceOn() { FC.TurnOn(); LC.TurnOn(); TC.TurnOn(); } public void DeviceOff() { FC.TurnOff(); LC.TurnOff(); TC.TurnOff(); } public static void main(String args[]) { System.out.println("====Facade===="); HomeDeviceFacade facade = new HomeDeviceFacade(); facade.DeviceOn(); System.out.println(); facade.DeviceOff(); } } class FanController { private int speed; public void ChangeFanSpeed(int _speed) { speed = _speed; } public void TurnOn() { System.out.println("Fan on"); } public void TurnOff() { System.out.println("Fan off"); } } class LightController { public void TurnOn() { System.out.println("Light on"); } public void TurnOff() { System.out.println("Light off"); } } class TVController { private int vol; public void changeVolume(int _vol) { vol = _vol; } public void TurnOn() { System.out.println("TV on"); } public void TurnOff() { System.out.println("TV off"); } }
可以看出Facade讓我們簡化了其他的動作,原本需要一個一個將電視風扇燈光打開,現在只需要一個步驟就可以將所有的裝置做開關,這簡化了系統
結論
Facade模式提出了一種通用方法,建立了新介面供客戶使用, 客戶並不需要原有系統的所有功能
Facade還有其他功用
- 追蹤系統的使用情況
由於所有的裝置都會經過HomeDeviceFacade 所以我們可以利用這個class 追蹤裝置的使用狀況
- 改換系統
最後依照慣例附上 Sample Code
沒有留言:
張貼留言