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

    1 外观模式Facade

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

    理解:

    外观模式作为结构型模式中的一个简单又实用的模式,外观模式通过封装细节来提供大粒度的调用,直接的好处就是,封装细节,提供了应用写程序

    的可维护性和易用性。外观模式一般应用在系统架构的服务层中,当我们是多个不同类型的客户端应用程序时,比如一个系统既可以在通过Web的形式访

    问,也可以通过客户端应用程序的形式时,可能通过外观模式来提供远程服务,让应用程序进行远程调用,这样通过外观形式提供服务,那么不管是什么样

    的客户端都访问一致的外观服务,那么以后就算是我们的应用服务发生变化,那么我们不需要修改没一个客户端应用的调用,只需要修改相应的外观应用即

    可。

    内容:外观对象,子系统类

    作用:

     1、我们在使用第三方类库或者API的时候,我们通过本地的API接口的封装,来完成对第三方API接口的粗粒度外观对象,通过这个外观对象可以很容

    易的完成服务的调用。我们这里举例说明吧,例如现在我有一个发送手机短信的API接口,是第三方提供给我的API接口,那么我如何包装呢?

    下面给出对API封装的相关代码和说明

        public class MessageHelper
        {
            private static readonly MessageHelper instance = new MessageHelper();

            #region API接口

            [DllImport("EUCPComm.dll", EntryPoint = "SendSMS")]  //即时发送
            private static extern int SendSMS(string sn, string mn, string ct, string priority);

            [DllImport("EUCPComm.dll", EntryPoint = "SendSMSEx")]  //即时发送(扩展)
            private static extern int SendSMSEx(string sn, string mn, string ct, string addi, string priority);

            [DllImport("EUCPComm.dll", EntryPoint = "SendScheSMS")]  // 定时发送
            private static extern int SendScheSMS(string sn, string mn, string ct, string ti, string priority);

            #endregion

            #region 对上面的API包装后的方法

            public int SendSMSEx1(string sn, string mn, string ct, string addi, string priority)
            {
                return SendSMSEx(sn, mn, ct, addi, priority);
            }

            public int SendSMS1(string sn, string mn, string ct, string priority)
            {
                return SendSMS(sn, mn, ct, priority);
            }

            public int SendScheSMS1(string sn, string mn, string ct, string ti, string priority)
            {
                return SendScheSMS(sn, mn, ct, ti, priority);
            }

            #endregion
        }

    相关的测试代码:

          static void Main(string[] args)
           {
               //相关的测试代码
               //调用外观对象中的服务
               MessageHelper.instance.SendSMS1("", "", "", "");
           }

          2、我们在架构设计的过程中,一次的功能访问可能需要同时的调用很多个对象,那么如果我们在服务调用的时候,能够在应用程序调用中一次就能完

    成所有要同时调用的对象那该多好啊,外观模式无疑是最好的原则,特别是在分布式应用中,通过远程调用服务,通过外观模式降低应用程序与服务的交互

    次数,同时可以降低应用程序的复杂性。外观模式+DTO,提供远程服务调用的性能,这些都是好的设计方式。我们来看看简单的示例吧,我想我们更

    能了解其中的奥妙。看图说话吧,我们这里以一次远程同步服务为例。

    未使用外观模式前:

    clip_image003一个简单的同步服务,由于应用程序在这次服务中为了完成同步操作,必须进行3次远程连接来进

    行把3个对象进行同步,那么如果我们使用外观对象之后呢,我们只需要访问一次即可完成3个对象的同步。这无疑提高了系统的性能和效率。

    clip_image004并且通过DTO来进行传输的话,可以提供远程服务调用的访问此时和效率

    UML图:

    其他:

    我们这里先给出一个外观模式的原理图:

    clip_image001这是未使用外观模式之前的情况,下面给出使用外观模式后的情形:

    clip_image002通过外观对象来组织细粒度的服务的调用,外观对象提供给外部应用程序可

    以使用的服务,而具体的调用细粒度的过程则被外观对象给封装起来,当然这个过程就是封装变化的部分,而将变化的部分与应用程序进行隔离,无疑对程

    序的易用性和可维护性都是很大的提高。

    demo:第三方API调用

  • 相关阅读:
    使用HttpURLConnection
    使用HttpURLConnection
    HTTP基本工作原理
    HTTP基本工作原理
    【杭电】[2022]海选女主角
    【杭电】[2022]海选女主角
    【吐槽】这是第200篇博文
    【吐槽】这是第200篇博文
    【NYOJ】[8]一种排序
    【NYOJ】[8]一种排序
  • 原文地址:https://www.cnblogs.com/wwwfj/p/3235966.html
Copyright © 2011-2022 走看看