ToB企服应用市场:ToB评测及商务社交产业平台

标题: 【23种设计模式】外观模式(十) [打印本页]

作者: 篮之新喜    时间: 2023-10-5 17:44
标题: 【23种设计模式】外观模式(十)
前言

外观模式,英文名称是:Facade Pattern。我们先从名字上来理解一下“外观模式”。我看到了“外观”这个词语,就想到了“外表”这个词语,两者有着很相近的意思。就拿谈恋爱来说,“外表”很重要,如果第一眼看着很舒服、有眼缘,那就有交往下去的可能。如果长的“三寸钉、枯树皮”,估计就够呛了。在这方面,“外观”和“外表”有着相同的作用。在软件系统中,要完成一个功能,需要很多接口调用,不仅增加了开发难度,也增加了调试成本和维护的复杂度。不如我们把这些接口再封装一次,给一个很好的“外观”,让使用者使用更方便,只需调用一个接口,就可以完成以前调用多个接口的来完成任务。这个模式很简单,大家很容易理解,可能大家在编码的过程中已经不止一次使用过该模式了,只是不知道名字罢了。
外观模式的定义

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

外观模式的组成

外观模式的代码实现

马上就到“双十一”了,人们又开始疯狂的购买了。其实购买的过程很复杂,但是我们在购买的过程只需要选择自己喜欢的商品,也可以加入购物车,最后点击付款就完成了。其实这个过程没有那么简单。我们下面就模仿一下购买的过程吧。
购买过程有几点必须要做的事情:
1、身份验证安全,没有认证是无效用户。
2、系统安全,检查系统环境,防止注入、跨站和伪造等攻击
3、网银安全,检查付款地址的有效性,检查网关是否正常
安全子系统定义
  1. /// <summary>
  2.     /// 身份认证子系统A
  3.     /// </summary>
  4.     public class AuthoriationSystemA
  5.     {
  6.         public void MethodA()
  7.         {
  8.             Console.WriteLine("执行身份认证");
  9.         }
  10.     }
  11. /// <summary>
  12.     /// 系统安全子系统B
  13.     /// </summary>
  14.     public class SecuritySystemB
  15.     {
  16.         public void MethodB()
  17.         {
  18.             Console.WriteLine("执行系统安全检查");
  19.         }
  20.     }
  21. /// <summary>
  22.     /// 网银安全子系统C
  23.     /// </summary>
  24.     public class NetBankSystemC
  25.     {
  26.         public void MethodC()
  27.         {
  28.             Console.WriteLine("执行网银安全检测");
  29.         }
  30.     }
复制代码
高层Facade
  1. /// <summary>
  2.     /// 高层的Facade
  3.     /// </summary>
  4.     public class SystemFacade
  5.     {
  6.         private AuthoriationSystemA auth;
  7.         private SecuritySystemB security;
  8.         private NetBankSystemC netbank;
  9.         public SystemFacade()
  10.         {
  11.             auth = new AuthoriationSystemA();
  12.             security = new SecuritySystemB();
  13.             netbank = new NetBankSystemC();
  14.         }
  15.         public void Buy()
  16.         {
  17.             auth.MethodA();//身份认证子系统
  18.             security.MethodB();//系统安全子系统
  19.             netbank.MethodC();//网银安全子系统
  20.             Console.WriteLine("我已经成功购买了!");
  21.         }
  22.     }
复制代码
调用
  1. /// <summary>
  2.     /// FacadeTest 测试类
  3.     /// </summary>
  4.     public class FacadeTest : ITest
  5.     {
  6.         public void RunTest()
  7.         {
  8.             SystemFacade facade = new SystemFacade();
  9.             facade.Buy();
  10.         }
  11.     }
复制代码

外观模式的优缺点

优点

缺点


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4