定義一個更高層的介面,使子系統更加容易使用,提供更簡單的方法與系統交流
- 意圖:希望簡化原有系統的使用方式
- 問題:只需要使用某個複雜系統的子集,或者需要以一種特殊的方式與系統交流
- 解決方案: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
沒有留言:
張貼留言