设计模式=外观模式

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调用

posted @ 2013-08-04 09:45  youhumian  阅读(232)  评论(0编辑  收藏  举报