文章地址:http://blog.jobbole.com/113953/

什么是架构模式?

Wikipedia 的解释:

在软件架构中,架构模式是对特定环境下常见问题的通用且可重用的解决方案。架构模式与软件设计模式很相似,但架构模式的层次更高,且外延更大。

这篇文章将简述常见的 10 种架构模式的概念、用法以及其优缺点。

  1. 分层模式(Layered pattern)
  2. 客户端/服务器模式(Client-server pattern)
  3. 主/从模式(Master-slave pattern)
  4. 管道/过滤器模式(Pipe-filter pattern)
  5. 代理模式(Broker pattern)
  6. 对等模式(Peer-to-peer pattern)
  7. 事件总线模式(Event-bus pattern)
  8. 模型/视图/控制器(MVC)模式(Model-view-controller pattern)
  9. 黑板模式(Blackboard pattern)
  10. 解析器模式(Interpreter pattern)

1. 分层模式(Layered pattern)

分层模式用于对结构化设计的软件进行层次拆解,每个层次为独立的抽象,为其上层抽象提供服务。

系统通常被拆分为以下四个层次:

  • 表示层(也称为 UI 层)
  • 应用层(也称为服务层)
  • 业务逻辑层(也称为领域层)
  • 数据访问层(也称为持久化层)

使用场景

  • 通用桌面应用程序
  • 电子商务 Web 应用

2. 客户端/服务器模式(Client-server pattern)

客户端/服务器模式由两个部分构成:一个服务器与多个客户端。服务器组件同时为多个客户端组件提供服务。客户端向服务器发启服务请求,服务器将相应服务信息回应给客户端。此外,服务器持续监听来自客户端的请求。

使用场景

  • 电子邮件、文件共享及银行业务等在线应用

3. 主/从模式(Master-slave pattern)

主/从模式由两个部分构成:主设备与从设备。主服务组件将作业分发给多个从设备组件,并根据这些从设备反馈的结果,计算生成最终结果。

使用场景

  • 数据库复制,主数据库被认定为权威数据源,各从数据库与主数据保持同步
  • 在计算机系统中通过总线互连的各设备(包括主设备与从设备)

4. 管道/过滤器模式(Pipe-filter pattern)

管道/过滤器模式用于构造用于生成及处理数据流的系统。每个处理过程都封装在过滤器(filter)组件之中,要处理的数据通过 管道(pips) 进行投递。管道同时用于作为 过滤器(filter) 间的缓冲及同步。

使用场景

  • 编译器,一系列的过滤器用于词法分析、语法分析、语义分析及代码生成
  • 生物信息学的工作流

5. 代理模式(Broker pattern)

代理模式用于在结构化系统中对组件解耦。系统内各组件间采用远过程调用(remote service invocations)的方式交互。代理(Broker)组件充当组件间通讯的协调角色。

提供服务的组件将其能力(服务以及特性)发布给代理,客户端均向代理请求服务,由代理将请求重定向到先前已发布过对应服务的组件进行处理。

使用场景

  • 消息中间件软件:Apache ActiveMQ,Apache Kafka,RabbitMQ 与 JBoss 等等

6. 对等模式(Peer-to-peer pattern)

对等模式中的组件称之为对等体(peer),对等体既作为向其他对等体请求服务的客户端,同时也做为响应其他对等体请求的服务端。对等体可以在运行过程中动态地改变其角色,即,既可以单独做为客户端或服务端运行,又可同时作为客户端与服务端运行。

使用场景

  • 网络文件共享:Gnutella 与 G2)
  • 流媒体协议:P2PTV 与 PDTP.
  • 流媒体应用: Spotify.

7. 事件总线模式(Event-bus pattern)

事件总线模式应用于事件处理,主要由四个组件构成:事件源(event source),事件侦听者(event listener),通道(Channel)以及总线(event bus)。 事件源将消息发布到总线的特定通道,侦听者订阅相应的通道,事件源所发布的消息经通道通告给订阅通道的侦听者。

使用场景

  • Android 开发
  • 通告(Notification)服务

8. 模型/视图/控制器(MVC)模式(Model-view-controller pattern)

模型/视图/控制器模式(简称 MVC 模式)将交互式应用程序拆分为三个部分:

  1. 模型(model) – 包含核心功能及数据
  2. 视图(view) – 呈现信息给用户(通过有多个视图)
  3. 控制器(controller) – 处理用户的输入操作

MVC 模式通过将内部信息表示、用户信息呈现以及用户操作接收分开的方式解耦组件,实现高效代码重用。

使用场景

  • 主流开发语言所构建的互联网网页应用架构
  • Django 与 Rails 等网页应用开发框架

9. 黑板模式(Blackboard pattern)

黑板模式适用于 无预知确定解决策略 的问题,主要由三个组件构成:

  • 黑板(blackboard) – 用于存储解空间对象的结构化全局内存
  • 知识(knowledge)源 – 能自表意的专用模块
  • 控制(control)组件 – 选择、配置与执行的模块

所有的组件均能访问黑板,组件可将新生成的数据对象写入黑板,也可以通过模式匹配从黑板中获取知识源所生成的特定数据。

使用场景

  • 语音识别
  • 车辆识别和追踪
  • 蛋白质的结构鉴定
  • 声纳信号解析

10. 解析器模式(Interpreter pattern)

解析器模式用于设计语言的解析程序,主要用于指定评估程序代码行,即解析出特定语言的语句与表达式,其核心思想是为语言的每个符号定义相应的类。

使用场景

  • SQL 等数据库查询语言
  • 通讯协议描述语言

转载于:https://www.cnblogs.com/lwq666/p/11050074.html

软件体系架构阅读笔记(四)相关推荐

  1. 软件体系架构阅读笔记一

    与最初的大型中央主机相适应,最初的软件结构体系也是Mainframe结构,该结构下客户.数据和程序被集中在主机上,通常只有少量的GUI界面,对远程数据库的访问比较困难.随着PC的广泛应用,该结构逐渐在 ...

  2. 软件体系架构阅读笔记(十五)

    对于开发者来说,架构设计是软件研发过程中最重要的一环,所谓没有图纸,就建不了房子.在遍地App的互联网时代,架构设计有了一些比较成熟的模式,开发者和架构师也可以经常借鉴. 但是,随着应用的不断发展,最 ...

  3. 06软件构架实践阅读笔记之六

    06软件构架实践阅读笔记之六 今天阅读的是第五章实现质量属性,在书中,存在这样的一句话:如果不顾及所有的质量属性,每一个好的质量属性都是有害的.在我认为,这句话就是最好的说明. 在上一章中,聊到的是系 ...

  4. 软件体系结构测试定义,软件体系架构复习要点

    本文根据华南理工大学软件学院<软件体系架构>课程及相关教材<软件构架实践>总结,作复习回顾用. 很抽象的课程--不知道开给本科生干什么,而且是跟项目管理一起上的,安排很不科学. ...

  5. 【备份专题】备份软件体系架构解析

     备份软件体系架构解析 ICT架构师技术交流 从今天开始,我将陆续分享有关备份架构和特性系列知识,数据保护方案目前主要分了两大类,一类是备份,另一类是容灾.备份主要是对数据提供多副本冗余,当数据发 ...

  6. JS高级程序设计——阅读笔记四

    JS高级程序设计--阅读笔记四 第六章 集合引用类型 6.1 Object 6.2 Array 6.2.1 创建数组 from()函数 6.2.2 数组空位 6.2.3 数组索引 6.2.4 检测数组 ...

  7. 双稳态环PUF:一种强物理不可封闭功能的新架构阅读笔记

    双稳态环PUF:一种强物理不可克隆函数的新架构阅读笔记 原文:<The Bistable Ring PUF: A New Architecture for Strong Physical Unc ...

  8. 软件体系架构:RM-ODP参考模型简介

    http://blog.csdn.net/dy1984315/article/details/1714546 除了大家耳熟能详的4+1视图模型外,还有其他软件体系结构表示方法.Reference Mo ...

  9. 软件体系架构风格21种整理

    文章目录 题目 给"同学带饭"的架构风格 什么架构风格的构件可以适应变动 概述 软件危机 软件架构的主要思想和特征 软件架构的概念 组成派 决策派 其他定义 软件架构风格与模式 架 ...

最新文章

  1. 使用BigQuery ML预测天气(6.19)
  2. 一文详尽2019全年AI技术突破
  3. php内加百度熊掌号,百度熊掌号接入网站页面改造详细步骤
  4. Unity 中的协同程序
  5. jenkins 手动执行_我常用的SpringBoot+Jenkins自动化部署技巧,贼好用,推荐给大家...
  6. 【bzoj1026】[SCOI2009]windy数 数位dp
  7. EIGRP非等价负载均衡
  8. Combobox报错:row[opts.textField].toLowerCase is not a function。
  9. 程序员找工作时,大公司 VS 小公司,应该如何做出正确的选择?
  10. 面试题 01.06. 字符串压缩
  11. Sitecore 6.4 升级Sitecore 8.2.7准备
  12. LayUI树形表格treetable使用详解
  13. 非负矩阵分解与K-means聚类
  14. 几何基础 笛沙格定理
  15. c语言上机试题倒计时,C语言课程实训-显示考试倒计时.doc
  16. BP算法的反向传播和权值修正(1)
  17. Geography和 Geometry 的区别
  18. 关于vue2停止维护,vue3迭代更新的思考:
  19. 网格模型高级技术(8)
  20. 2008-12-11 日志:人到三十

热门文章

  1. 简单的朋友圈界面-Android(一)
  2. 网络基础3----->广域网传输流程
  3. 科研中提高效率的软件网站
  4. 常用正则表达式—邮箱
  5. 基于JAVA自考学位系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署
  6. leetcode-6_递归和回溯
  7. CSS在浏览器不能加载出来的解决方案
  8. VirtualBox时空机-记忆中的1990年代
  9. android开发用百度识别图片格式,Android开发学习之路-机器学习库(图像识别)、百度翻译...
  10. php 友盟推送角标,android集成友盟推送实现离线在线推送及桌面图标角标设置