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

简介:
在软件系统中,有时面临着一个复杂对象的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的 各个部分 经常面临着剧烈的变化,但是将它们 组合在一起 的算法却相对 稳定。 如何提供一种"封装机制"来隔离出"各个部分"的变化,从而保持系统中的"稳定构建算法"不随需求的改变而改变?
建造者(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,如需转载请自行联系原作者


目录
相关文章
|
9天前
|
缓存 图形学 异构计算
【Shader渲染流水线流程】
【Shader渲染流水线流程】
|
18天前
|
存储 缓存 Windows
软件体系结构 - 流水线技术
软件体系结构 - 流水线技术
22 0
|
27天前
|
设计模式 关系型数据库 Java
顺畅的职责传递-用责任链模式优化决策流程
本文首先通过经典场景展示了不使用设计模式时的问题与痛点。接着,引入责任链模式,详细讲解了其定义、解决问题的方式、结构图及工作原理,并通过重构示例展示了该模式如何解决原有痛点。最后,对责任链模式的优势、缺点以及在实际应用中可能遇到的挑战和限制进行了总结。责任链模式通过解耦请求发送者和接收者,提供了灵活的请求处理机制,适用于多个处理者按顺序处理请求的场景。然而,该模式也可能导致请求得不到处理或性能下降等问题,需在实际应用中权衡利弊。
34 0
顺畅的职责传递-用责任链模式优化决策流程
|
30天前
|
设计模式 API 数据库
【C/C++ 设计思路】C++中解耦策略的艺术:有效管理复杂依赖关系
【C/C++ 设计思路】C++中解耦策略的艺术:有效管理复杂依赖关系
56 3
|
9月前
|
JSON 前端开发 数据库
基于jsplumb构建的流程设计器
最近在准备开发工作流引擎相关模块,完成表结构设计后开始着手流程设计器的技术选型,调研了众多开源项目后决定基于jsplumb.js开源库进行自研开发,保证定制化的便捷性,相关效果图及项目地址如下
94 0
基于jsplumb构建的流程设计器
|
6月前
|
设计模式 Java
JAVA设计模式5:建造者模式,将对象的构建过程与其表示分离
JAVA设计模式5:建造者模式,将对象的构建过程与其表示分离
|
9月前
云效中流水线的触发机制和变量可配置多套吗?分支和版本不同每次都要复制N个流水线吗?
云效中流水线的触发机制和变量可配置多套吗?分支和版本不同每次都要复制N个流水线吗?
157 1
|
设计模式 前端开发 Java
职责驱动设计以及状态模式的变化
职责驱动设计以及状态模式的变化
职责驱动设计以及状态模式的变化
|
前端开发 测试技术 领域建模
领域驱动设计统一过程交付物
领域驱动设计统一过程交付物
领域驱动设计统一过程交付物
|
存储 SQL 分布式计算
数据流水线架构
数据流水线架构
316 0
数据流水线架构