惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
J
Java Code Geeks
Blog — PlanetScale
Blog — PlanetScale
F
Fortinet All Blogs
腾讯CDC
大猫的无限游戏
大猫的无限游戏
Jina AI
Jina AI
WordPress大学
WordPress大学
雷峰网
雷峰网
小众软件
小众软件
D
DataBreaches.Net
V
Visual Studio Blog
博客园 - Franky
IT之家
IT之家
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
B
Blog RSS Feed
博客园 - 聂微东
T
Tailwind CSS Blog
有赞技术团队
有赞技术团队
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Microsoft Security Blog
Microsoft Security Blog
G
Google Developers Blog
云风的 BLOG
云风的 BLOG

博客园 - 杨连国

win10 IoT开发 Serial​Device 返回 null .NET Delegates: A C# Bedtime Story【转载】 C++ 和 C# 变量定义的一点区别 变量定义 接口(CLR via C# 读书笔记) 类型和成员基础(CLR via C#) 基本类型、引用类型、值类型——(CLR via C#) 抽象工厂模式(abstract factory) 李建忠C#面向对象设计模式纵横谈 —— 单件模式 李建忠C#面向对象设计模式纵横谈 —— 面向对象设计模式与原则 程序设计和重构的目标 OO设计原则——读《你必须知道的.NET》 输入法灰掉bug解决 半角全角Bug解决 由迭代模式想到得——用设计模式理解 .NET ASCII 表设计之妙 调用VC封装的DLL时,两个类型匹配问题 调用非托管Dll Invoke 和 BeginInvoke 的区别
生成器模式(builder)
杨连国 · 2008-07-03 · via 博客园 - 杨连国

     在说明生成器模式之前,不得不说一说它和抽象工厂模式的区别:两者看起来很相似,都是应对一系列“对象”的变化,而抽象出一个公共接口。不同处在于抽象工程所要创建的一系列对象尽管是相关的,但各自是各自,他们之间的具体应用关系由客户决定;而生成器模式对应的一系列对象是在一个“大对象”下的必要组成部分,也就是说,我们关心的是要得到一个“大对象”,而抽象工厂所关心的是要得到一系列对象。另一个显著的区别是,抽象工厂模式得到一系列对象的使用“算法”由用户决定,而生成器模式是用固定的算法组织生成的一系列子对象,来生成一个所要的对象。

     回归到生成器模式上来,先说动机(也就是要用模式的原因)

     在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对固定。(引用李建忠视频)

     上述原因说出了变化,和不变。和抽象工厂的动机比较,我们会发现多出来了“固定算法”和“要得到的是一个复杂的大对象”。既然是这样,我们就可以再定义一个组织者类,来描述算法,我们还是用抽象工厂封装变化部分。鉴于我们要得到的并不是子对象,所以只需要对外发布一个生成大对象的方法就是了。

      因为还未实际使用过该模式,所以说对这个“用算法构成大对象”,具体应该是个什么样,还缺乏感性认识。

     再琢磨一下GoF的定义:
 
     将一个负责对象的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。

           ————GoF

     哦,忘了说缺点了,如果固定的算法不再固定,就不能应用该模式。确切的说所有的模式共有的缺点就是,当假设不变的部分发生了变化,该模式就不适用。

     探讨:将固定算法放在抽象build接口内可不可以呢?