两颗西柚|10个常见的软件架构模式( 二 )


文章图片
事物总线模式
该模式主要处理组件 , 有4个重要的组件:事件源、事件侦听器、通道和事件总线 。 事件源将消息发送到事件总线上的特定通道 , 侦听器会订阅特定的频道 。 当消息发送到频道中后 , 订阅该频道的侦听器会收到该消息的通知 。
安卓开发
通知服务
两颗西柚|10个常见的软件架构模式
文章图片
MVC模式
该模式将交互式应用分为三个部分 ,
模型——包含核心功能和数据
视图——向用户显示信息(可以定义多个视图)
控制器——处理用户的输入
这样做是为了将数据的内部表示与用户输入和向用户展示的形式分离开来 , 这样可以解耦组件 , 同时也可以进行高效的代码重用 。
主流编程语言的互联网应用架构
网络框架 , 如Django和Rails.
两颗西柚|10个常见的软件架构模式
文章图片
黑板模式
此模式对于尚无确定性解决方案的问题很有用 , 黑板模式由三部分组成:
黑板——一个结构化的全局内存 , 包含解决方案领域的对象
知识源——具有自身含义的专业模块
控制组件——选择、配置和执行模块
所有组件都可以访问黑板 , 组件可能会产生要添加到黑板中的新数据对象 , 组件在黑板上寻找特定类型的数据 , 并且可以通过与现有知识源进行模式匹配来找到这些数据 。
语音识别
车辆识别与跟踪
蛋白质结构鉴定
声呐信号解释
两颗西柚|10个常见的软件架构模式
文章图片
解释器模式
此模式通常用于设计组件来解释使用专用语言写出的程序 , 它主要指定如何估算程序行 , 即以特定语言编写的语句或表达式 。 基本思想是为每种语言符号都设计一个类 。
数据库查询语言 , 如SQL
用于描述通信协议的语言
两颗西柚|10个常见的软件架构模式
文章图片
架构模式对比
分层模式
一个底层服务可以被不同的高层服务使用;
分层结果更容易进行标准化 , 因为可以清晰地定义每个层级
层级内的修改不会影响其它层
不是普适性的架构;
某些场景下 , 需要跳过其中一些分层
CS模式
容易对系列服务进行建模 , 供客户端请求
请求通常是在服务器的不同线程中进行响应的;
因为不同客户端有不同形式 , 进程间通信会造成很大负载
主从模式
准确性——服务的执行委托给了不同的从模块
从模块是独立的:没有共享状态;
主从模块间的通信延迟可能是一个问题 , 尤其在实时系统中 。
管道过滤器模式
支持并发处理 , 其中输入、输出由数据流组成时 , 过滤器在接收到数据时即开始计算;
容易添加过滤器 , 系统很容易扩展;
过滤器可重用 , 可以通过重新组合已有的过滤器来创建不同的管道流 。
整体效率受最慢的过滤程序限制;
从一个过滤器传递到另一个时 , 存在数据转换的负载
代理模式
允许对象进行动态的修改、增、删、重定位 , 对开发者来说内容分发是透明的
需要对服务描述进行标准化
P2P模式
支持去中心化运算;
对任意节点的失败都有高度稳定性;
在资源和计算能力方面具有高度可伸缩性
无法保证服务质量 , 因为节点之间是自愿合作的;
很难保证安全;
性能取决于节点的数量
事件总线模式
很容易向系统好加入新的发布者、订阅者和连接;
对于高度分布式应用很有效
伸缩性可能是个难题 , 因为所有的信息传输都要通过相同的时间总线


推荐阅读