•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. [Angular 2] ElementRef, @ViewChild & Renderer

    ElementRef: In Angular2 Doc, it suggest to "avoid" using ElementRef. It access DOM directl ...

  2. 线性表 及Java实现 顺序表、链表、栈、队列

    数据结构与算法是程序设计的两大基础,大型的IT企业面试时也会出数据结构和算法的题目, 它可以说明你是否有良好的逻辑思维,如果你具备良好的逻辑思维,即使技术存在某些缺陷,面试公司也会认为你很有培养价值, ...

  3. <QtEndian> - Endian Conversion Functions

    The <QtEndian> header provides functions to convert between little and big endian representati ...

  4. Systemd 入门教程:实战篇

    Systemd 入门教程:实战篇 上一篇文章,介绍了 Systemd 的主要命令,这篇文章主要介绍如何使用 Systemd 来管理我们的服务,以及各项的含义: 一.开机启动 对于那些支持 System ...

  5. Busybox支持中文的解决办法

    转载:http://blog.csdn.net/wavemcu/article/details/7202908 ******************************************** ...

  6. Windows 之 CMD命令

    1. ipconfig 查看 Windows IP 配置 2. ping IP地址 查看远程IP是否通畅 2. ipconfig/flushdns 刷新和重置缓存 3. netsh winsock r ...

  7. jQuery的如何捕捉回车键,改变事件标签

    我希望有一个jQuery的解决方案,我必须接近,有什么需要做的? $('html').bind('keypress', function(e) { if(e.keyCode == 13) { retu ...

  8. DIH中添加不同的数据源

    需求:从mysql数据库中读取一个知识记录,从记录表中的字段值中获取一个文件路径,读取xml文件,xml文件中可能包含多个文档内容.建立索引. xml文件样例: <?xml version=&q ...

  9. 跨平台网络库(采用C++ 11)

    I:跨平台设计基础 在windows下使用0字节的WSARecv/WSASend(读写)作为读写检测,将IOCP作为一个通知模型,而"抛弃"它的异步模型. 即:把它当作epoll来 ...

  10. 【HTML5 2】《html5 开发精要与实例讲解》 step1 -- 导读

    一.教程重点:以 综合性案例 为导向,辅之以 精要知识点 二.内容概况: 第1部分:通过 大小型案例 对 各重要知识点 进行详细讲解 第2部分:jWebSocket.RGraph.WebGL 三个重要 ...