•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. corner2

    Original: https://github.com/LondonX/corner2 Backup: https://github.com/eltld/corner2

  2. iOS开发——数据持久化OC篇&plist文件增删改查操作

    Plist文件增删查改   主要操作: 1.//获得plist路径    -(NSString*)getPlistPath: 2.//判断沙盒中名为plistname的文件是否存在    -(BOOL ...

  3. iOS开发——UI篇Swift篇&UIImageView

    UIImageView override func viewDidLoad() { super.viewDidLoad() titleLabel.text = titleString //通过坐标和大 ...

  4. SQL Sever 2008 数据库文件的备份和还原

    数据库文件备份保存的方式我知道的有两种,第一种就是我们知道到的简单的分离,生成.mdf和.ldf文件,然后使用的时候直接进行附加数据库就可以了. 那么还有生成备份的文件.bak 的,这个操作要在步骤: ...

  5. [原创]SQL SERVER 2008R2安装

    配置系统环境说明 操作系统:Windows 7 操作系统版本:旗舰版 SP1 操作系统位数:x64 注:其它系统配置也基本相似,只是可能菜单的名字或者所处位置不一样,具体的配置如有不同,请自行搜索 安 ...

  6. Photoshop-制作图片圆角2种方法[转]

    方案一:       使用选区和蒙版相结合,用图章制作圆角选区,删除多余部分 效果: 实现步骤: 一.如果是直接在已有的图片上面编辑则看下图,否则跳过此不 二.用矩形工具选择需要保留的图片内容 三.选 ...

  7. 二进制序列化框架easypack发布啦!

    简介 easypack是基于boost.serialization的二进制序列化框架,使用极其方便. Examples 基本类型 int age = 20; std::string name = &q ...

  8. 通过uiview动画来放大图片

    UIImage *image=[UIImage imageNamed:"]; UIImageView *imageView=[[UIImageView alloc]init]; imageV ...

  9. 2. Android框架和工具之 Volley

    Java基础知识强化之网络编程笔记23:Android网络通信之 Volley(Google开源网络通信库)

  10. Json格式理解

    json格式中共有三个重要符号"[","{",":" 中括号和花括号的唯一区别就是:中括号不需要key,花括号必须有key