zoukankan      html  css  js  c++  java
  • 设计模式——外观模式

      外观模式——为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

      外观模式是指当有很多的类,它们实现不同的功能,可能出现很多种的组合功能,需要在客户端不停的去实现,造成了客户端责任不单一,代码过多、重复、易变等问题,外观模式可以解决这一问题。

    1.SubSystem类,子系统,包含了很多的功能实现,要实现这些功能需要在客户端创建这些组合

     1 /// <summary>
     2 /// 子系统1
     3 /// </summary>
     4 public class SubSystemOne
     5 {
     6     public void MethodOne()
     7     {
     8         //子系统方法1
     9     }
    10 }
    11 
    12 /// <summary>
    13 /// 子系统2
    14 /// </summary>
    15 public class SubSystemTwo
    16 {
    17     public void MethodTwo()
    18     {
    19         //子系统方法2
    20     }
    21 }
    22 
    23 /// <summary>
    24 /// 子系统3
    25 /// </summary>
    26 public class SubSystemThree
    27 {
    28     public void MethodThree()
    29     {
    30         //子系统方法3
    31     }
    32 }
    33 
    34 /// <summary>
    35 /// 子系统4
    36 /// </summary>
    37 public class SubSystemFour
    38 {
    39     public void MethodFour()
    40     {
    41         //子系统方法4
    42     }
    43 }
    SubSystem.cs

    2.Facade类,外观类,使各个子系统进行整合,统一给外界调用,它需要了解所有子系统的方法或者属性,进行组合,以备外界调用

     1 /// <summary>
     2 /// 外观类
     3 /// </summary>
     4 public class Facade
     5 {
     6     //子系统
     7     private readonly SubSystemOne _one;
     8     private readonly SubSystemTwo _two;
     9     private readonly SubSystemThree _three;
    10     private readonly SubSystemFour _four;
    11 
    12     /// <summary>
    13     /// 构造方法进行创建子系统
    14     /// </summary>
    15     public Facade()
    16     {
    17         _one=new SubSystemOne();
    18         _two=new SubSystemTwo();
    19         _three=new SubSystemThree();
    20         _four =new SubSystemFour();
    21     }
    22 
    23     /// <summary>
    24     /// 组合方式A
    25     /// </summary>
    26     public void MethodA()
    27     {
    28         _one.MethodOne();
    29         _two.MethodTwo();
    30         _three.MethodThree();
    31     }
    32 
    33     /// <summary>
    34     /// 组合方式B
    35     /// </summary>
    36     public void MethodB()
    37     {
    38         _two.MethodTwo();
    39         _four.MethodFour();
    40     }
    41 }
    Facade.cs

    3.客户端代码,不必知道子系统的实现方法,甚至根本不必只有有这么多子系统,就可以实现功能

     1 class Program
     2 {
     3     static void Main(string[] args)
     4     {
     5         //创建外观对象
     6         var facade = new Facade();
     7         //让外观类实现组合A的功能
     8         facade.MethodA();
     9         //让外观类实现组合B的功能
    10         facade.MethodB();
    11     }
    12 }
    Program.cs

      外观模式使用情况比较多,大致分为以下三种:

      (1)在项目设计初期阶段,有意识的将不同的层分离,在层与曾之间建立外观模式,降低耦合性;

      (2)在开发阶段,子系统往往因为不停的重构烟花而变得越来越复杂,增加外观模式可以提供一个简单的接口,减少它们的依赖;

      (3)在维护一个遗留的大型项目时,可能这个系统已经非常难以维护和扩展了,但因为它包含了非常重要的功能,新的需求必须依靠它,此时使用外观模式,让新系统与Facade对象交互,Facade与遗留代码交互所有复杂工作。

                                                          以上内容部分参考程杰的《大话设计模式》一书

  • 相关阅读:
    Linux下解析域名命令-dig 命令使用详解
    重写、覆盖、重载、多态几个概念的区别分析
    介绍python中运算符优先级
    介绍Python中6个序列的内置类型
    Mysql(Mariadb)数据库主从复制
    winscp中使用sudo的方法
    git push跳过用户名和密码认证配置教程
    案例:通过shell脚本实现mysql数据备份与清理
    毕业季,我的Linux求职之路
    PHP和ajax详解
  • 原文地址:https://www.cnblogs.com/Smilodon/p/3100130.html
Copyright © 2011-2022 走看看