构建器设计模式的实际用途是什么?

时间:2009-05-03 02:59:57

标签: c# design-patterns architecture

我已经读过它了,我理解它的基本功能 - 我想知道这种模式的常见现实使用示例。

作为参考,我主要使用Microsoft堆栈来处理业务应用程序,Web和Windows。

6 个答案:

答案 0 :(得分:5)

想想行程建设者。有很多东西可以添加到你的行程如酒店,租车,航空公司航班和每个基数为0至*。爱丽丝可能有车和酒店,而鲍勃可能有两个航班,没有车和三个酒店。

要创建一个混凝土工厂甚至抽象工厂来吐出行程是非常困难的。你需要的是一个工厂,你可以有不同的步骤,某些步骤发生,有些则不会,并且通常会因创建过程而产生非常不同类型的对象。

一般情况下,您应该从工厂开始,只有在您需要对流程进行更高的粮食控制时才能转到生成器。

此外,Data & Object Factory还有一个很好的描述,代码示例和UML。

答案 1 :(得分:5)

主要用例:

  • 当最终结果是不可变的时,但是 用构造函数完成所有操作 太复杂了
  • 当我想要部分建造时 某些东西并部分重用 建造的东西,但定制它 每次结束
  • 当你从工厂模式开始,但是正在构建的东西 工厂有太多的排列

总之,构建器使构造函数保持简单,但允许不变性。

你说C#,但这是一个简单的Java例子:

StringBuilder sb = new StringBuilder();
sb.append("Hello");
sb.append(" ");
sb.append("World!");
System.out.println(sb.toString());

相反:

String msg = "";
msg += "Hello";
msg += " ";
msg += "World!";
System.out.println(msg);

答案 2 :(得分:1)

编辑:你会在我的评论中看到我可能已经赶紧回答这个问题,并在此过程中迷惑自己。我会继续编辑这个以与抽象工厂一起工作,我认为我最初的意图,但请注意,这主要是供参考,不一定是对原始问题的回应。

我见过的最常见的例子是如何构建GUI组件。

例如,如果您正在为应用程序设计一个表单,其GUI组件可以采用多种表示形式(可能基于您运行的平台),那么您将设计一个抽象工厂来处理这些组件的创建。

为了向表单添加新控件,代码可能如下所示:

public MyForm ()
{
    GuiFactory  factory = new Win32Factory ();
    Button      btn = factory.CreateButton ();

    btn.Text = "Go!"
    btn.Location = new Point (15, 50);

    this.Controls.Add (btn);
}

这满足了抽象工厂模式,因为您可以创建工厂对象的不同实例,以创建所创建对象的不同表示而无需更改客户端代码(这是一个基本示例,但我认为通常您不会创建Win32Factory使用new,它将通过一些其他抽象获得。)

答案 3 :(得分:0)

我们过去经常看到的一个常见示例是操作系统的“sysgen”。你有一个进程选择了你需要的所有模块,配置它们,并返回一个已经定制的可引导映像。

答案 4 :(得分:0)

我遇到的一个用例是拥有多个数据源。特定情况涉及缓存和数据库。大多数数据是从缓存中提取的,或者不是。第二个加载器查看数据以查看它是否从缓存加载。它将查询数据库以完成填充数据。

答案 5 :(得分:0)

有时候考虑non-software related example of design patterns来理解它们会很有帮助。

我现在正在使用一个系统,它使用构建器来创建订单。该顺序是由几个其他类组成的类。我的构建器创建并验证关联的类,如果所有类都有效,则创建订单类的实例。通过这种方式,我可以确定我从未有过缺少数据的订单实例。