外观模式(Facade):
外部通过一个统一的接口,访问子系统中的一群接口。外观模式定义了一个高层接口,为子系统中的一组接口提供一个一致的入口,使得子系统更容易使用。外观模式相对比较简单,可以理解为中介,原先租房需要自己一个个筛选,联系房东,谈好价格,签合同等等,现在不需要这些了,只要你说出要求中介就会将房子找好,你只需要掏钱签合同就可以了,不需要关系其他琐碎的事情。
外观模式的角色:
1)外观角色:为多个子系统对外提供一个共同的接口;
2)子系统角色:实现系统的部分功能,客户可以通过外观角色访问它;
3)客户角色:通过一个外观角色访问各个子系统的功能。

- 1 internal class Program
- 2 {
- 3 private static void Main(string[] args)
- 4 {
- 5 Facade facade = new Facade();
- 6 facade.method();
- 7 }
- 8 }
- 9
- 10 internal class Facade
- 11 {
- 12 private SubSystem01 subSystem01;
- 13 private SubSystem02 subSystem02;
- 14 private SubSystem03 subSystem03;
- 15
- 16 public Facade()
- 17 {
- 18 this.subSystem01 = new SubSystem01();
- 19 this.subSystem02 = new SubSystem02();
- 20 this.subSystem03 = new SubSystem03();
- 21 }
- 22
- 23 public void method()
- 24 {
- 25 subSystem01.method();
- 26 subSystem02.method();
- 27 subSystem03.method();
- 28 }
- 29 }
- 30
- 31 public class SubSystem01
- 32 {
- 33 public void method()
- 34 {
- 35 Console.WriteLine($"{nameof(SubSystem01)}-{nameof(method)}");
- 36 }
- 37 }
- 38
- 39 public class SubSystem02
- 40 {
- 41 public void method()
- 42 {
- 43 Console.WriteLine($"{nameof(SubSystem02)}-{nameof(method)}");
- 44 }
- 45 }
- 46
- 47 public class SubSystem03
- 48 {
- 49 public void method()
- 50 {
- 51 Console.WriteLine($"{nameof(SubSystem03)}-{nameof(method)}");
- 52 }
- 53 }
外观模式的优缺点:
优点:外观模式是迪米特法则的典型应用。
1)降低了子系统与客户端之间的耦合度,使得子系统的变化不会影响调用它的客户类;
2)对客户屏蔽了子系统组件,减少了客户处理的对象数目,并使得子系统使用起来更加容易;
3)降低了大型软件系统中的编译依赖性,简化了系统在不同平台之间的移植过程,因为编译一个子系统不会影响其他的子系统,也不会影响外观对象。
缺点:
1)不能很好的限制客户使用子系统;
2)违背了开闭原则
参考:http://c.biancheng.net/view/1369.html