设计模式之笔记--外观模式(Facade)
外观模式(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(); } }