外觀模式(Facade) 定義 外觀模式(Facade),為子系統中的一組介面提供一個一致的界面,此模式定義了一個高層介面,這個介面使得這一子系統更加容易使用。 類圖 描述 Facade:外觀類,外觀類知道哪些子系統類負責處理請求,將用戶的請求代理給恰當的子系統對象。 Classes:子系統類,實現 ...
外觀模式(Facade)
定義
外觀模式(Facade),為子系統中的一組介面提供一個一致的界面,此模式定義了一個高層介面,這個介面使得這一子系統更加容易使用。
類圖
描述
Facade:外觀類,外觀類知道哪些子系統類負責處理請求,將用戶的請求代理給恰當的子系統對象。
Classes:子系統類,實現了子系統的功能。
外觀模式的實現核心是由外觀類去保存各個子系統的引用,客戶端只需要引用這個外觀類,然後由外觀類去調用各個子系統中的方法。
外觀模式將一個或者多個類的複雜的操作進行了隱藏,只顯示出一個一致的界面供客戶端使用;即外觀模式提供一個簡潔的外觀介面將一個複雜的子系統變得容易使用。
應用場景
在飯店,顧客希望來一份微辣的西紅柿雞蛋面,此時顧客並不用關心麵條的製作過程,只需要跟服務員說好“來一份西紅柿雞蛋面,微辣”,然後等著服務員把麵條端上來就行了。
/// <summary> /// 麵條 /// </summary> public class Noodles { public void Cook() { Console.WriteLine("煮麵條."); } } /// <summary> /// 水 /// </summary> public class Water { public void Boil() { Console.WriteLine("燒水."); } } /// <summary> /// 西紅柿 /// </summary> public class Tomato { public void Cook() { Console.WriteLine("加入西紅柿."); } } /// <summary> /// 雞蛋 /// </summary> public class Egg { public void Cook() { Console.WriteLine("打入雞蛋."); } } /// <summary> /// 辣椒 /// </summary> public class Pepper { public void Put() { Console.WriteLine("放入少許辣椒."); } } public class Facade { private Noodles noodles; private Water water; private Tomato tomato; private Egg egg; private Pepper pepper; public Facade() { this.noodles = new Noodles(); this.water = new Water(); this.tomato = new Tomato(); this.egg = new Egg(); this.pepper = new Pepper(); } public void Cook() { this.tomato.Cook(); this.water.Boil(); this.noodles.Cook(); this.egg.Cook(); this.pepper.Put(); } }