•Gateway入口

  ◦一个封装了对外部系统或资源访问的对象.

    ◾OO系统中,也需要访问一些不是对象的事物,DB表,XML,事务.

    ◾这些外部资源的API很复杂.

    ◾入口类对象将简单的方法调用转换成相应的特定API.

  ◦运行机制

    ◾本质上是简单的包装器模式.

    ◾封装外部资源,创建一个简单的API,并用入口将对该API的调用转移到外部资源上.

    ◾它可以作为使用服务桩的极佳位置.

    ◾应尽可能保持入口简单.复杂的逻辑应该放在入口的客户中.

    ◾有时需要多个对象来构造入口

    ◾常见的:一个后端,一个前端.

      ◾后端封装对外部资源操作的代码,但并不简化其API.

      ◾前端将复杂API转换为对APP可用的,更为简单的操作.

      ◾当从外部服务到客户所需的形式的适配很复杂时使用.

    ◾反之,如果对外部服务的封装工作很简单时,一个类完成封装和适配即可.

  ◦使用时机

    ◾如果必须通过一个复杂的接口与位于系统之外的事务交互时,可以考虑

    ◾入口将复杂性封装起来.提高了入口之外的代码的可读性.

    ◾入口使系统更易于测试.

    ◾使得用一种资源替代另一种资源变得更加容易.简单而高效的变更保护形式.

    ◾对比外观模式

      ◾入口是客户方为了其特定应用而编写的.外观是由服务的作者提供.

      ◾外观通常暗示一个与原始接口不同的接口.而入口很可能是为了测试或替换资源目的而简单的照搬被包装的接口.

    ◾对比适配器模式

      ◾适配器修改一个已实现的接口,使其与另一个接口相匹配.

      ◾入口模式中,没有一个已存在的接口.

    ◾对比调停者模式

      ◾调停者用来将多个对象解耦,使它们无需互相引用,而只需与调停者发生关联.

      ◾入口模式中通常只涉及两个对象.且被包装资源并不知道入口的存在.

  ◾通常在创建入口时将其保存在一个公共的位置,来保证其他类能定位它.可以使用静态类.

Base Pattern基本模式_Gateway入口的更多相关文章

  1. PHPCMS V9 框架代码分析(入口程序)

    PHPCMS是采用MVC设计模式开发,基于模块和操作的方式进行访问,采用单一入口模式进行项目部署和访问,无论访问任何一个模块或者功能,只有一个统一的入口. 入口程序是在前期处理用户请求的引导程序.它是 ...

  2. vue-cli之打包多入口配置

    在使用vue-cli初始化vue项目时,默认打包为单入口,有时候一个项目可能会有不同入口,在这种情况下,就需要我们稍微修改下webpack配置文件了,具体步骤如下: 1.修改webpack.base. ...

  3. SaltStack系列(四)之实例编写

    前面已经介绍的够多了,这里来让我们写一些完整的实例来梳理一下. 强调一下,sls文件的抒写格式都是"-"后面跟一个空格,然后后面跟参数: 然后后面再跟一个空格,然后是要填写的值.但 ...

  4. 一不小心写了个WEB服务器

    开场 Web服务器是啥玩意? 是那个托管了我的网站的机器么? No,虽然那个也是服务器,但是我们今天要说的Web服务器主要是指像IIS这样一类的,用于处理request并返回response的工具,没 ...

  5. saltstack之(八)配置管理部署LAMP

    场景:公司有10台服务器需要安装lamp测试环境,使用saltstack编写state文件进行批量部署,可以提高工作效率,减少人为出错的可能性,保证环境的一致性. saltstack之配置管理lamp ...

  6. 删除目录下的所有".svn"文件

    丢一段python代码: # -*- coding: cp936 -*- import os import re import shutil '''找出路径base(包括子目录)下所有符合patter ...

  7. 《初识PE》导出表

    转自:http://www.blogfshare.com/pe-export.html (二).导出表 当PE文件被执行的时候,Windows装载器将文件装入内存并将导入表中登记的DLL文件一并装入, ...

  8. 基于webpack2.x的vue2.x的多页面站点

    vue的多页面 依旧使用vue-cli来初始化我们的项目 然后修改主要目录结构如下: ├── build │   ├── build.js │   ├── check-versions.js │   ...

  9. 发布自己第一个npm 组件包(基于Vue的文字跑马灯组件)

    一.前言 总结下最近工作上在移动端实现的一个跑马灯效果,最终效果如下: 印象中好像HTML标签的'marquee'的直接可以实现这个效果,不过 HTML标准中已经废弃了'marquee'标签 既然HT ...

随机推荐

  1. LintCode 子树

    easy 子树 19% 通过 有两个不同大小的二进制树: T1 有上百万的节点: T2 有好几百的节点.请设计一种算法.判定 T2 是否为 T1的子树. 您在真实的面试中是否遇到过这个题? Yes 例 ...

  2. Qt Quick实现的涂鸦程序

    之前一直以为 Qt Quick 里 Canvas 才干够自绘.后来发觉不是,原来还有好几种方式都能够画图! 能够使用原始的 OpenGL(Qt Quick 使用 OpenGL 渲染).能够构造QSGN ...

  3. Android蓝牙传感应用

    Android手机一般以客户端的角色主动连接SPP协议设备(接上蓝牙模块的数字传感器),连接流程是: 1.使用registerReceiver注册BroadcastReceiver来获取蓝牙状态.搜索 ...

  4. Java和C++中多态的实现方式

    多态是面向对象的最主要的特性之一,是一种方法的动态绑定,实现运行时的类型决定对象的行为.多态的表现形式是父类指针或引用指向子类对象,在这个指针上调用的方法使用子类的实现版本.多态是IOC.模板模式实现 ...

  5. 位图字体生成工具Bitmap Font Generator的使用

    首先,说下为什么要使用这款工具作为cocos2d-x的字体生成工具.其实cocos2d-x能使用的字体生成工具也有好几个,当然了本人也没有全部使用过,就不一一说明了.Bitmap Font Gener ...

  6. 基于Raft构建弹性伸缩的存储系统的一些实践

    基于Raft构建弹性伸缩的存储系统的一些实践 原创 2016-07-18 黄东旭 聊聊架构 最近几年来,越来越多的文章介绍了 Raft 或者 Paxos 这样的分布式一致性算法,但主要集中在算法细节和 ...

  7. 利用yum工具安装应用程序

    在安装gtk+编译环境的过程中,你会发现,RPM软件包之间的依赖关系非常复杂.在实际管理过程中,这种依赖关系可能会更加复杂.因此非常有必要寻找一种自动化安装工具,让安装工具自己处理这些关系复杂的依赖关 ...

  8. 【Android车载系统 News | Tech 3】News 从手机征战到汽车 Android Auto对比CarPlay 2014-12-29

    Google和苹果都试图给用户的汽车带来一个安全和友好的移动体验.Android Auto和CarPlay是这两家公司推出的专为车载而重新设计的移动用户界面,双方目前都在筹备着在明年正式大规模推广. ...

  9. 【python,排序】几种常用的排序算法,使用python实现

    1. 选择排序 -- -- def selectSort(l): for i in range(len(l)): j = i + 1 t_min = l[i] loc_min = i for j in ...

  10. LRU算法实现

    JDK中的实现 在JDK中LinkedHashMap可以作为LRU算法以及插入顺序的实现,LinkedHashMap继承自HashMap,底层结合hash表和双向链表,元素的插入和查询等操作通过计算h ...