随笔 - 268  文章 - 0  评论 - 1028  阅读 - 160万

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

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


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

posted on   JeffWong  阅读(616)  评论(2编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
< 2009年5月 >
26 27 28 29 30 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31 1 2 3 4 5 6

I know how to make it works and I want to know how it works.
点击右上角即可分享
微信分享提示