一.介绍
外观模式(Facade Pattern),也叫门面模式。属于结构型模式。为子系统中的一系列接口提供一个一致的界面,该模式提供了一个高层接口,这个接口使得这一子系统更加容易使用。
二.实现
外观模式是通过定义一个外观类将子类包装起来,来简化客户端所调用的方法。
/// <summary> /// 外观类 /// </summary> public class Facade { SubSystemA a = new SubSystemA(); SubSystemB b = new SubSystemB(); SubSystemC c = new SubSystemC(); public void MethodA() { a.MethodA(); b.MethodB(); } public void MethodB() { b.MethodB(); c.MethodC(); a.MethodA(); } } public class SubSystemA { public void MethodA() { Console.WriteLine("SubSystemA.MethodA"); } } public class SubSystemB { public void MethodB() { Console.WriteLine("SubSystemB.MethodB"); } } public class SubSystemC { public void MethodC() { Console.WriteLine("SubSystemC.MethodC"); } } //调用 public static void Main(string[] args) { Facade facade = new Facade(); facade.MethodA(); facade.MethodB(); }
使用了外观模式后,客户端只需要依赖外观类,使得客户端和子系统的依赖解耦。其实我们在开发过程中,都会使用过外观模式,比如三层架构就是其中一个例子。
三.总结
优点:
1.外观模式对客户端屏蔽了子系统组件,从而简化了接口,减少了客户处理的对象数目并使得子系统的使用更加简单。
2.外观模式实现了客户端和子系统之间的松耦合关系,而子系统内部的组件是紧耦合的。松耦合使得子系统的组件变化不会影响到客户端。
缺点:
1.如果新增新的子系统可能需要修改外观类,这就不符合开闭原则,不过这也是没法避免的。