首先,Façade模式的作用是什么?簡化接口。比如我們買電腦,當電腦店店員把機子組裝好后交給我們,我們拿回家把顯示器鍵盤等的插頭都插到機箱后面,然后用電腦時只要按一下主機箱上的電源,電腦就啟動了,我們無需關心機箱內部各個部件是如何啟動,是CPU先過電還是硬盤先過電。在這里,這個機箱就可以認為是一個Façade,這個Façade(機箱)就使啟動電腦變得很容易,就算是一個完全不懂電腦的人,也知道如何啟動電腦了。這就是Façade最大作用所在:簡化接口,使得客戶程序(人)更方便地使用子系統(電腦)。試想,如果沒有機箱,那我們想啟動電腦豈不是得去記先啟動CPU還是先啟動硬盤?要怎么啟動它們?同時,Façade也讓系統耦合度更低,因為你不需要直接跟CPU、硬盤等直接接觸了。
接下來就用代碼示例一下: 下面是幾個電腦配件類,它們都有一個Run()方法和一個Stop()方法,分別表示它們的啟動和關閉: //CPU internal class CPU { public void Run() {
Console.WriteLine("Cpu is running...");
}
public void Stop() {
Console.WriteLine("Cpu stopped.");
}
}
//主板 internal class MainBoard {
public void Run() {
Console.WriteLine("MainBoard is running...");
}
public void Stop() {
Console.WriteLine("MainBoard stopped.");
}
}
//硬盤 internal class HardDisk {
public void Run() {
Console.WriteLine("HardDisk is running...");
}
public void Stop() {
Console.WriteLine("HardDisk stopped.");
}
}
//內存 internal class Memory {
public void Run() {
Console.WriteLine("Memory is running...");
}
public void Stop() {
Console.WriteLine("Memory stopped.");
}
}
//電源 internal class Power {
public void Run() {
Console.WriteLine("Power is running...");
}
public void Stop() {
Console.WriteLine("Power stopped");
}
}
然后是個主機類(Facade):
/// <summary> /// 電腦主機(Façade(外觀)類) /// </summary> public class HostComputerFacade {
private CPU cpu;
private MainBoard mainBoard;
private HardDisk hardDisk;
private Memory memory;
private Power power;
//構造方法,初始化各個配件 public HostComputerFacade() {
cpu = new CPU();
mainBoard = new MainBoard();
hardDisk = new HardDisk();
memory = new Memory();
power = new Power();
}
//啟動電腦,我不知道各配件的啟動順序如何,我們不妨假設它們就按如下順序啟動 public void TurnOn() {
power.Run();
mainBoard.Run();
cpu.Run();
memory.Run();
hardDisk.Run();
}
//關閉電腦 public void ShutDown() {
hardDisk.Stop();
memory.Stop();
cpu.Stop();
mainBoard.Stop();
power.Stop();
}
}
然后我們就可以在Main()方法中使用“電腦”了:
public static void Main(string[] args) {
HostComputerFacade hcf = new HostComputerFacade();
hcf.TurnOn();
//…這里做一些使用電腦的操作
hcf.ShutDown(); }
Look,客戶程序要是想“使用電腦”的話,只要實例化主機,然后按下電源開關(TurnOn()),相箱內各部件就自動按順序啟動了,再長按電源開關幾秒鐘(ShutDown()),機箱內各部件就按順序停止了,而如果沒有這個HostComputerFacade類的話,我們就要親自動手讓Power啟動、再讓MainBoard啟動,然后再讓CPU啟動…,關的時候也要先讓HardDisk停止,再讓Memory停止…,那豈不太麻煩了,對吧?
總 結: Facade模式的作用就在于簡化接口,同時更松耦合,而各個子系統之間一般是聯系比較緊的,就像機箱內的各配件,在某種意義上說,它們之間的聯系是挺緊的。
|