• 设计模式-结构型-外观模式


    外观模式(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 

  • 相关阅读:
    [LeetCode]24. Search Insert Position插入位置
    [LeetCode]23. Set Matrix Zeroes矩阵清零
    [LeetCode]22. 3Sum Closest最近三者之和
    [LeetCode]21. 3Sum三者之和
    [LeetCode]20. Unique Paths II唯一路径
    [LeetCode]19. Unique Paths唯一路径
    [LeetCode]18. Contains Duplicate II重复检测
    [LeetCode]17. Majority Element主元素
    第13章建造者模式
    第15章抽象工厂模式
  • 原文地址:https://www.cnblogs.com/az4215/p/11579912.html
Copyright © 2020-2023  润新知