怎样理解NET设计模式实例中的外观模式

发布时间:2021-10-27 17:49:58 作者:柒染
来源:亿速云 阅读:103

本篇文章给大家分享的是有关怎样理解NET设计模式实例中的外观模式,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

一、外观模式简介(Brief Introduction)

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

二、解决的问题(What To Solve)

1、分离不同的两个层

典型的分层例子是Net三层架构,界面层与业务逻辑层分离,业务逻辑层与数据访问层分类。这样可以为子系统提供统一的界面和接口,降低了系统的耦合性。

2、减少依赖

随着功能增加及程序的重构,系统会变得越来越复杂,这时增加一个外观可以提供一个简单的接口,减少他们之间的依赖。

3、为新旧系统交互提供接口

有的时候,新系统需要旧系统的核心功能,而这个旧的系统已经很难维护和扩展,可以给新系统增加一个Façade类,是的新系统与Façade类交互,Façade类与旧系统交互素有复杂的工作。

三、外观模式分析(Analysis)

1、外观模式结构

怎样理解NET设计模式实例中的外观模式

2、源代码

1、子系统类SubSystemOne

public class SubSystemOne  {      public void MethodOne()      {          Console.WriteLine("执行子系统One中的方法One");      }  }

2、子系统类SubSystemTwo

public class SubSystemTwo  {      public void MethodTwo()      {          Console.WriteLine("执行子系统Two中的方法Two");      }  }

3、子系统类SubSystemThree

public class SubSystemThree  {      public void MethodThree()      {          Console.WriteLine("执行子系统Three中的方法Three");      }  }

4、Facade 外观类,为子系统类集合提供更高层次的接口和一致的界面

public class Facade  {      SubSystemOne one;      SubSystemTwo two;      SubSystemThree three;      public Facade()      {         one = new SubSystemOne();          two = new SubSystemTwo();          three = new SubSystemThree();      }      public void MethodA()      {          Console.WriteLine("开始执行外观模式中的方法A");          one.MethodOne();          two.MethodTwo();          Console.WriteLine("外观模式中的方法A执行结束");          Console.WriteLine("---------------------------");      }      public void MethodB()     {          Console.WriteLine("开始执行外观模式中的方法B");          two.MethodTwo();          three.MethodThree();          Console.WriteLine("外观模式中的方法B执行结束");      }  }

5、客户端代码

static void Main(string[] args)  {      Facade facade = new Facade();      facade.MethodA();      facade.MethodB();      Console.Read();  }

3、程序运行结果

怎样理解NET设计模式实例中的外观模式

四.案例分析(Example)

1、场景

假设远程网络教育系统-用户注册模块包括功能有

1、验证课程是否已经满人

2、收取客户费用

3、通知用户课程选择成功

如下图所示

怎样理解NET设计模式实例中的外观模式

子系统类集合包括:PaymentGateway类、RegisterCourse类、NotifyUser类

PaymentGateway类:用户支付课程费用

RegisterCourse类:验证所选课程是否已经满人以及计算课程的费用

NotifyUser类:" 用户选择课程成功与否"通知用户

RegistrationFacade类:外观类,提供一个统一的界面和接口,完成课程校验、网上支付、通知用户功能

2、代码

1、子系统类集合

namespace FacadePattern     {    /// <summary>    /// Subsystem for making financial transactions    /// </summary>    public class PaymentGateway    {    public bool ChargeStudent(string studentName, int costTuition)    {    //Charge the student    Console.WriteLine(String.Format("Charging student {0} for ${1}", studentName, costTuition.ToString()));    return true;    }    }    /// <summary>    /// Subsystem for registration of courses    /// </summary>    public class RegisterCourse    {     public bool CheckAvailability(string courseCode)    {    //Verify if the course is available..                   Console.WriteLine(String.Format("Verifying availability of seats for the course : {0}", courseCode));                  return true;               }              public int GetTuitionCost(string courseCode)               {                   //Get the cost of tuition                   return 1000;               }           }          /// <summary>           /// Subsystem for Notifying users          /// </summary>          public class NotifyUser           {              public bool Notify(string studentName)              {                  //Get the name of the instructor based on Course Code                  //Notify the instructor                   Console.WriteLine("Notifying Instructor about new enrollment");                   return true;              }          }       }

2、外观类Fa&ccedil;ade Class

/// <summary>    /// The Facade class that simplifies executing methods  in the subsystems and hides implementation for the client   /// </summary>    public class RegistrationFacade    {    private PaymentGateway _paymentGateWay;    private RegisterCourse _registerCourse;    private NotifyUser _notifyUser;    public RegistrationFacade()    {    _paymentGateWay = new PaymentGateway();    _registerCourse = new RegisterCourse();    _notifyUser = new NotifyUser();    }    public bool RegisterStudent(string courseCode, string studentName)     {    //Step 1: Verify if there are available seats    if (!_registerCourse.CheckAvailability(courseCode))    return false;    //Step 2: Charge the student for tuition    if (!_paymentGateWay.ChargeStudent(studentName, _registerCourse.GetTuitionCost(courseCode)))    return false;    //Step 3: If everything's successful so far, notify the instructor of the new registration    return _notifyUser.Notify(studentName);

3、客户端代码

namespace FacadePattern    {    class Program     {    static void Main(string[] args)    {    RegistrationFacade registrationFacade = new RegistrationFacade();    if (registrationFacade.RegisterStudent("DesignPatterns101", "Jane Doe"))    Console.WriteLine("Student Registration SUCCESSFUL!");    else   Console.WriteLine("Student Registration Unsuccessful");    }    }     }

五、总结(Summary)

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

外观模式可以解决层结构分离、降低系统耦合度和为新旧系统交互提供接口功能。

以上就是怎样理解NET设计模式实例中的外观模式,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。

推荐阅读:
  1. Java描述设计模式(12):外观模式
  2. 设计模式之外观模式-总结

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

上一篇:处理C++静态成员时的注意事项是怎样的

下一篇:Mysql数据分组排名实现的示例分析

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》