我是设计模式的新手,所以我有一个关于Builder模式的问题。
今天我听说Builder Pattern与Java中的类StringBuilder
不同,C#。我知道Builder模式的主要目标是在几个步骤中创建复杂的对象......我认为这是用它的方法StringBuilder
制作Append
...所以我很难找到差...
你能告诉我是否真的有什么不同,如果是......它是什么:)?
答案 0 :(得分:17)
听起来你可能会混淆StringBuilder类和Builder Design Pattern。它们实际上是两种截然不同的想法。
StringBuilder是Java和.NET中的一个类,它允许更高效的字符串操作:(来自MSDN)
String对象是不可变的。一切 你使用其中一种方法的时间 System.String类,你创建一个新的 内存中的字符串对象,其中 需要新的空间分配 那个新对象。在哪些情况下 你需要重复表演 对字符串的修改, 与创建相关的开销 新的String对象可能很昂贵。该 System.Text.StringBuilder类可以 用于修改字符串时使用 没有创建新对象。对于 例如,使用StringBuilder类 可以提高性能 将许多字符串连接在一起 一个循环。
另一方面,Builder Pattern是一种设计模式,它是一组用于组织复杂代码的类和/或接口:
构建器模式是一个软件 设计模式。目的是为了 抽象的建设步骤 对象让不同 这些步骤的实现可以 构建不同的表示形式 对象。通常,构建器模式是 用于按照建造产品 复合图案,结构 图案。
Append
的{{1}}方法只会为现有字符串添加更多字符。没有创建新对象(构建器模式的基本功能),并且不涉及设计模式。它是对单个对象实例的单个方法调用。
答案 1 :(得分:7)
ad 1)创建String时没有抽象。例如,树结构是抽象,可以由对象或XML文件(实现)表示。
ad 2)使用StringBuilder
对象时,有两个协作者:
Client
StringBuilder
使用Builder Pattern
时,有四个合作者:
Director
- 它告诉Abstract Builder
构建步骤是什么(如果是树结构,步骤是:创建root,添加子,......)Abstract Builder
- 是Director
使用的抽象。Concrete Builder
- 是Abstract Builder
的具体实现(可能是XMLBuilder,ObjectBuilder,...)Client
- 对Director
说启动建设。答案 2 :(得分:0)
分析文档,我可以说StringBuilder没有使用相应的模式。它使用Composite pattern。构建器模式不会“逐步手动”或循环收集对象。它有现成的解决方案。