StringBuilder和Builder Pattern

时间:2011-03-08 20:34:09

标签: design-patterns builder stringbuilder

我是设计模式的新手,所以我有一个关于Builder模式的问题。 今天我听说Builder Pattern与Java中的类StringBuilder不同,C#。我知道Builder模式的主要目标是在几个步骤中创建复杂的对象......我认为这是用它的方法StringBuilder制作Append ...所以我很难找到差...

你能告诉我是否真的有什么不同,如果是......它是什么:)?

3 个答案:

答案 0 :(得分:17)

听起来你可能会混淆StringBuilder类和Builder Design Pattern。它们实际上是两种截然不同的想法。

StringBuilderJava.NET中的一个类,它允许更高效的字符串操作:(来自MSDN)

  

String对象是不可变的。一切   你使用其中一种方法的时间   System.String类,你创建一个新的   内存中的字符串对象,其中   需要新的空间分配   那个新对象。在哪些情况下   你需要重复表演   对字符串的修改,   与创建相关的开销   新的String对象可能很昂贵。该   System.Text.StringBuilder类可以   用于修改字符串时使用   没有创建新对象。对于   例如,使用StringBuilder类   可以提高性能   将许多字符串连接在一起   一个循环。

另一方面,Builder Pattern是一种设计模式,它是一组用于组织复杂代码的类和/或接口:

  

构建器模式是一个软件   设计模式。目的是为了   抽象的建设步骤   对象让不同   这些步骤的实现可以   构建不同的表示形式   对象。通常,构建器模式是   用于按照建造产品   复合图案,结构   图案。

Append的{​​{1}}方法只会为现有字符串添加更多字符。没有创建新对象(构建器模式的基本功能),并且不涉及设计模式。它是对单个对象实例的单个方法调用。

答案 1 :(得分:7)

  1. 目的不同。 String Builder帮助构建String,Builder模式将对象的构造与其表示分开。
  2. 结构不同。 String Builder有两个协作者,Builder模式有四个协作者。
  3. ad 1)创建String时没有抽象。例如,树结构是抽象,可以由对象或XML文件(实现)表示。

    ad 2)使用StringBuilder对象时,有两个协作者:

    1. Client
    2. StringBuilder
    3. 使用Builder Pattern时,有四个合作者:

      1. Director - 它告诉Abstract Builder构建步骤是什么(如果是树结构,步骤是:创建root,添加子,......)
      2. Abstract Builder - 是Director使用的抽象。
      3. Concrete Builder - 是Abstract Builder的具体实现(可能是XMLBuilder,ObjectBuilder,...)
      4. Client - 对Director说启动建设。

答案 2 :(得分:0)

分析文档,我可以说StringBuilder没有使用相应的模式。它使用Composite pattern。构建器模式不会“逐步手动”或循环收集对象。它有现成的解决方案。