簡介數據庫
外觀模式(Facade),將外部與內部子系統的通訊經過一個統一的門面對象進行。spa
由兩部分組成:code
具體實例對象
交易的保存,交易的保存涉及到交易自己數據庫表的保存、餘額的調整、交易修改備案的記錄等操做。接口
相關子類的代碼爲:string
/// <summary> /// 交易保存類--子系統1 /// </summary> class TradeManager { public void SaveTrade(Trade aTrade) { Console.WriteLine("交易編號爲{0}的交易保存成功", aTrade.NO); } } /// <summary> /// 交易修改備案類--子系統2 /// </summary> public class TradeDiffManager { public void DiffTrade(Trade aTrade) { Console.WriteLine("交易編號爲{0}的交易修改備案保存成功", aTrade.NO); } } /// <summary> /// 交易餘額記帳類--子系統3 /// </summary> public class TradeClearManager { public void ClearTrade(Trade aTrade) { Console.WriteLine("交易編號爲{0}的交易餘額記帳成功", aTrade.NO); } }
若是每一個客戶端保存交易時,每次都依次調用上述代碼,會使客戶端顯得累贅,代碼可讀性變差。it
代碼爲:class
public class ClientTest { public static void Main(string[] args) { Trade trade = new Trade(); trade.NO = 100; TradeManager tradeManager = new TradeManager(); tradeManager.SaveTrade(trade); TradeDiffManager tradeDiffManager = new TradeDiffManager(); tradeDiffManager.DiffTrade(trade); TradeClearManager tradeClearManager = new TradeClearManager(); tradeClearManager.ClearTrade(trade); Console.ReadLine(); } }
使用外觀模式,將原本在客戶端依次調用的一組方法放在門面角色裏面統一處理。方法
代碼爲:通信
public class FacadeClass { public void SaveTrade(Trade aTrade) { TradeManager tradeManager = new TradeManager(); tradeManager.SaveTrade(aTrade); TradeDiffManager tradeDiffManager = new TradeDiffManager(); tradeDiffManager.DiffTrade(aTrade); TradeClearManager tradeClearManager = new TradeClearManager(); tradeClearManager.ClearTrade(aTrade); } } public class ClientTest { public static void Main(string[] args) { Trade trade = new Trade(); trade.NO = 100; FacadeClass facade = new FacadeClass(); facade.SaveTrade(trade); Console.ReadLine(); } }
補充分析
1.門面類(即上文中的FacadeClass)自己能夠不少個,針對不一樣用途,對子系統的各個方法進行組裝。
2.通常來講,門面類只有一個實例(上面爲了簡單起見,沒有把門面類定義爲Singleton)
3.門面類自己通常沒有實現代碼,只是爲各個子系統提供一個集中的調用接口。
優勢:
1.爲複雜的子系統提供一個簡單接口。
2.提供子系統的獨立性。子系統不須要知道門面類,門面類只是他的一個客戶端而已。子系統自己的方法也能夠直接供外面調用。
3.在層次化結構中,可使用外觀模式定義每一層的入口。