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

推荐订阅源

Simon Willison's Weblog
Simon Willison's Weblog
Help Net Security
Help Net Security
P
Privacy International News Feed
T
Threat Research - Cisco Blogs
C
Cisco Blogs
C
CERT Recently Published Vulnerability Notes
NISL@THU
NISL@THU
L
LINUX DO - 热门话题
Security Latest
Security Latest
A
Arctic Wolf
G
GRAHAM CLULEY
月光博客
月光博客
S
Securelist
D
Docker
J
Java Code Geeks
T
Troy Hunt's Blog
T
Tenable Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
SecWiki News
SecWiki News
S
Security @ Cisco Blogs
量子位
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
L
LINUX DO - 最新话题
Recent Commits to openclaw:main
Recent Commits to openclaw:main
aimingoo的专栏
aimingoo的专栏
博客园 - 【当耐特】
H
Heimdal Security Blog
The Hacker News
The Hacker News
博客园 - 三生石上(FineUI控件)
Application and Cybersecurity Blog
Application and Cybersecurity Blog
N
Netflix TechBlog - Medium
Vercel News
Vercel News
Forbes - Security
Forbes - Security
B
Blog RSS Feed
H
Hackread – Cybersecurity News, Data Breaches, AI and More
IT之家
IT之家
B
Blog
MongoDB | Blog
MongoDB | Blog
博客园 - 聂微东
Google DeepMind News
Google DeepMind News
S
Secure Thoughts
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
C
Check Point Blog
云风的 BLOG
云风的 BLOG
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
T
The Blog of Author Tim Ferriss
L
Lohrmann on Cybersecurity
F
Full Disclosure
D
Darknet – Hacking Tools, Hacker News & Cyber Security
P
Proofpoint News Feed

博客园 - 杨连国

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接口内可不可以呢?