“变化的流水线”:建造者模式

简介:
在软件系统中,有时面临着一个复杂对象的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的 各个部分 经常面临着剧烈的变化,但是将它们 组合在一起 的算法却相对 稳定。 如何提供一种"封装机制"来隔离出"各个部分"的变化,从而保持系统中的"稳定构建算法"不随需求的改变而改变?
建造者(Builder)模式也叫生成器模式。用它来创建对象,目的是省去在对象发生变化时,需要修改代码中每一处对象创建的地方,应用这种模式,可以在一个复杂对象的内部结构(由许多其他子对象构成的结构)发生变化时,仅需要对对象有所修改,而复杂对象与其他的对象之间的关系、行为不需要进行修改。
GOF:将一个复杂对象的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。


举例来说, 假设有一台没有安装任何系统的苹果macbook笔记本,现在要“创建”一种集上网浏览网页,聊天和看电影这三种最基本功能的应用系统。
这里我们可以给出两种不同的实现途径:1、安装windows操作系统,使用firefox浏览器,windows版本的qq和暴风影音。2、安装macintosh操作系统,使用mac版本下的firefox浏览器,luma qq和暴风影音。
分析上面的两种途径,我们发现,构建系统时,操作系统,浏览器软件,聊天软件和视频软件组合到一起的 算法相对稳定 ,但是任一种途径中,它们使用的软件(包括浏览器,聊天工具和视频软件)都会面临着 剧烈的变化 (比如浏览器,不管windows还是mac系统,都可能改变为使用google浏览器等)。毫无疑问,我们会利用建造者模式来应对 构成复杂但构成结构和顺序相对稳定 的对象的 创建工作。
看实现代码:
ContractedBlock.gif Code

最后:正如你所看到的,一个应用系统的构成都是由其子系统(从操作系统到相关软件)组合(Composite)而来的,所以建造者模式和组合模式有很多联系,通常它们都结合在一起使用。








本文转自JeffWong博客园博客,原文链接:http://www.cnblogs.com/jeffwongishandsome/archive/2009/05/29/1491604.html,如需转载请自行联系原作者


目录
相关文章
|
2月前
|
数据可视化 安全 测试技术
部署流水线原则与工具设计
部署流水线原则与工具设计
34 1
|
3月前
|
Go C++ 运维
开发与运维函数问题之流水线的成员变量mContext类型如何解决
开发与运维函数问题之流水线的成员变量mContext类型如何解决
19 1
|
3月前
|
架构师 存储
软件交付问题之在设计领域模型和状态机时,模型和状态机,如何解决
软件交付问题之在设计领域模型和状态机时,模型和状态机,如何解决
|
5月前
|
项目管理
设置甘特图依赖关系技巧:项目管理高效指南
甘特图中的依赖关系是项目管理的关键,指任务间需按特定顺序执行的关系。依赖关系通常分为4种:Finish-to-Start(最常见)、Start-to-Start、Finish-to-Finish和Start-to-Finish。Zoho Projects提供了直观的甘特图工具,允许用户轻松设置和管理这些依赖关系,确保项目按需顺畅进行。理解并正确配置任务间的依赖对于项目成功至关重要。
83 1
|
5月前
|
存储 缓存 Windows
软件体系结构 - 流水线技术
软件体系结构 - 流水线技术
78 0
|
敏捷开发 测试技术
敏捷开发方法管理项目快速迭代,适应变化
Leangoo领歌是一款永久免费的专业敏捷开发管理工具,也提供私有部署。国产软件,提供端到端敏捷研发管理解决方案,包括小型团队敏捷开发,规模化敏捷SAFe,Scrum of Scrums大规模敏捷,涵盖敏捷需求管理、任务协同、进展跟踪、缺陷管理、统计度量等。提供了不同视角的统计,例如:进度统计、燃尽图、团队速率、任务分布、缺陷分布、测试用例分布等等,实时掌握项目状态及进展。
|
JSON 前端开发 数据库
基于jsplumb构建的流程设计器
最近在准备开发工作流引擎相关模块,完成表结构设计后开始着手流程设计器的技术选型,调研了众多开源项目后决定基于jsplumb.js开源库进行自研开发,保证定制化的便捷性,相关效果图及项目地址如下
132 0
基于jsplumb构建的流程设计器
云效中流水线的触发机制和变量可配置多套吗?分支和版本不同每次都要复制N个流水线吗?
云效中流水线的触发机制和变量可配置多套吗?分支和版本不同每次都要复制N个流水线吗?
201 1
|
前端开发 测试技术 领域建模
领域驱动设计统一过程交付物
领域驱动设计统一过程交付物
领域驱动设计统一过程交付物
|
存储 SQL 分布式计算
数据流水线架构
数据流水线架构
384 0
数据流水线架构