回答
想到一个行程生成器。有很多东西可以添加到您行程如旅馆,租车,航空公司航班和每个的基数是0到*。爱丽丝可能会有汽车和酒店,而鲍勃可能有两个航班,没有汽车和三家酒店。
要创建一个混凝土工厂甚至抽象工厂来吐出一个行程是非常困难的。您需要的是一个工厂,您可以采取不同的步骤,某些步骤发生,其他步骤不会发生,并且通常会因创建过程而产生非常不同类型的对象。
一般来说,只有在需要更高的粮食控制权的情况下,您才应该从工厂开始,然后转到建设者处。
另外,在Data & Object Factory有一个很好的描述,代码示例和UML。
编辑:你会在我的评论中看到,我可能会急于回答这个问题,并在过程中迷惑自己。我将继续编辑这个文档,以便与抽象工厂一起工作,因为我认为我原本打算这么做,但请注意,这主要是供参考,不一定是对原始问题的回应。
我见过的最常见的例子描述了如何构建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);
}
这满足了抽象工厂模式,因为你可以创建工厂对象的不同实例创建的不同表示你创建的对象,而不改变客户端代码(这是一个基本的例子,但我认为你通常不会使用new创建Win32Factory,它会通过其他抽象获得)。
我的印象是构建器封装了建筑物,所以实际的构建器会返回你的例子中的按钮,这样MyForm()会调用this.Controls.Add(builder.BuildGoButton());例如。 – 2009-05-03 04:27:10
是的,我越想越想,当我离开我的回应时,我想我的电线越过了。在考虑GUI时,我可能是在抽象工厂的思维背景下创建Button的不同表示,具体取决于您在哪个平台上运行。 – jeremyalan 2009-05-04 16:45:19
我们常常看到的一个常见示例是操作系统的“sysgen”。你有一个选择你需要的所有模块的过程,配置它们,并返回一个已定制的可启动镜像。
主要用例:
- 当最终的结果是不可改变的,但 使用构造做这一切将 太复杂
- 当我想部分建立 的东西,再利用该部分 但是每次都在 处自定义它
- 当你从工厂模式开始,但是由 构建的东西时,工厂有太多的排列
总之,构建器保持您的构造器简单,但允许不变性。
你说的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);
一个用途,我已经遇到具有多个数据源时的情况。具体情况涉及缓存和数据库。大部分数据都是从缓存中提取的,或者不是。第二个加载器查看数据以查看它是否从缓存中加载。它会查询数据库完成填充数据。
有时,想想non-software related example of design patterns以便了解它们会有所帮助。
我有一个系统,我现在正在使用一个构建器来创建一个订单。该订单是由其他几个类组成的类。我的构建器创建并验证关联的类,如果全部有效,则创建订单类的实例。这样我可以确定,我从来没有缺少数据的订单实例。
- 1. C#建筑 - 设计模式
- 2. 建筑设计模式
- 3. 建筑设计困境。什么是最好的设计?
- 4. 设计和建筑模式有什么区别
- 5. 增强现实应用的建筑设计模式
- 6. “国家设计模式”可以被认为是“建筑模式”?
- 7. 建筑/设计模式问题
- 8. 设计模式对于像建筑
- 9. 设计模式 - 建筑宇航员
- 10. 设计模式 - 这是什么模式?
- 11. Tuple的真正用途是什么?
- 12. EditorReuseAttribute的真正用途是什么?
- 13. 建筑设计
- 14. 什么是node.js与python相比的真实生活用途
- 15. 什么是实现Viewholder设计模式的最佳方式。
- 16. 建筑设计与高层设计有什么不同
- 17. .net中的设计模式是什么?
- 18. 这是什么样的设计模式?
- 19. FabricJS - 什么是建筑?
- 20. 什么是解除拥有实体服务的设计模式?
- 21. 这是什么设计模式?
- 22. 什么是动作设计模式?
- 23. 什么是门面设计模式?
- 24. 什么是“调度员”设计模式?
- 25. 这是什么设计模式?
- 26. 这是什么设计模式?
- 27. 什么是四人帮设计模式
- 28. 什么是鬼魂设计模式?
- 29. 这是什么设计模式?
- 30. 什么是非锁定设计模式?
同意!在我们的软件中,我们实现了构建器模式,但是基础对象是作为Factory对象的结果创建的,我们添加了必要的组件。 我的答案更多地是一个真实世界的编码示例,但是从更抽象的真实世界的角度来看+1。 – jeremyalan 2009-05-03 03:16:29