抽象工厂、工厂方法、构建器
这似乎是一个骗局,但请耐心等待 - 我保证我已阅读相关帖子(以及 GOF 书)。
在读完所有内容后,我仍然不清楚何时使用抽象工厂、工厂方法或构建器。我相信在我看到一个简单的问题示例后,它最终会被理解,这个问题最好由构建者来解决,而使用抽象工厂显然是愚蠢的。
您能否提供一个简单的示例,其中您将清楚地使用一种模式而不是其他模式?
我知道如果这个例子太简单,这可能会归结为一个意见问题,但我希望如果有人可以的话,那个人就是这样。
谢谢。
It may seem as if this is question is a dupe, but please bear with me - I promise I've read the related posts (and the GOF book).
After everything I've read, I still don't have it clear when to use an Abstract Factory, a Factory Method, or a Builder. I believe it will finally sink in after I see a simple example of a problem which is best approached by, say, a builder and it would be clearly silly to use, say, an abstract factory.
Can you provide a simple example where you would clearly use one pattern and not the others?
I understand it may boil down to a matter of opinion if the example is too simple, but I'm hopeful that if anybody can, that person is in SO.
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
构建器可以帮助您构建复杂的对象。一个示例是
StringBuilder
类 (Java、C#) ,逐段构建最终的字符串。一个更好的例子是 UriComponentsBuilder< Spring 中的 /a> 可以帮助您构建 URI。工厂方法一次性为您提供一个完整的对象(与构建器相反)。基类定义一个返回接口(或超类)引用的抽象方法,并将对象的具体创建推迟到子类。
抽象工厂是一个接口(或抽象类),用于创建许多不同的相关对象。一个很好的例子(在 .NET 中)是
DbProviderFactory
类,用于创建给定数据库提供程序(oracle、sql server 等)的相关对象(连接、命令等),具体取决于其具体实现。A builder helps you construct a complex object. An example is the
StringBuilder
class (Java, C#), which builds the final string piece by piece. A better example is the UriComponentsBuilder in Spring, which helps you build a URI.A factory method gives you a complete object in one shot (as opposed to the builder). A base class defines a single abstract method that returns an interface (or super class) reference, and defers the concrete creation of the object to subclasses.
An abstract factory is an interface (or abstract class) to create many different related objects. A good example (in .NET) is the
DbProviderFactory
class, that serves to create related objects (connections, commands, ...) to a given database provider (oracle, sql server, ...), depending on its concrete implementation.构建器
工厂方法
抽象工厂
Builder
Factory method
Abstract Factory
抽象工厂、工厂方法、构建器:所有这些模式都是创建模式,它们是处理对象创建机制的设计模式,试图以适合的方式创建对象情况。
工厂方法:
它可以使用继承或子类化来实现目的
要点:您将创建一个界面并创建一个界面。这些接口的具体实现。在工厂方法中,根据条件,您将获得公共接口的具体实现。
抽象工厂:
Builder:
Java 中 Builder 设计模式指南
相关文章:
设计模式:工厂、工厂方法与抽象工厂
将构建器保留在单独的类中(流畅的界面)
有用的链接:
sourcemaking< /a> 设计模式
Abstract Factory, Factory Method, Builder : All these patterns are creational patterns,which are design patterns that deal with object creation mechanisms, trying to create objects in a manner suitable to the situation.
Factory method:
It may use inheritance or sub classing to achieve the purpose
Key note: You will create an interface & specific implementation of these interfaces. In Factory method, depending on condition, you will get concrete implementation of common interface.
Abstract Factory:
Builder:
Guidelines for Builder design pattern in Java
Related posts:
Design Patterns: Factory vs Factory method vs Abstract Factory
Keeping builder in separate class (fluent interface)
Useful links:
sourcemaking design-patterns
抽象工厂模式使用(工厂)子类化来生成其他对象(非工厂)。抽象工厂还设想生成的对象属于并行层次结构(例如,为了处理平台独立性,每个平台一个层次结构)。
Builder 模式使用子类化来生成“输出”——根本不一定是对象。 GOF 示例让生成器生成文本输出(标记或其他)。
工厂方法模式与其他两种模式不同,将“创建者”分为抽象和具体实现(因此强调它属于框架实现)。与抽象工厂一样,它处理实际对象的制作。
这三个都非常相似,因为它们都使用子类化。子类化是它们的突出品质,它隐藏了细微的差异(如上所述),因此许多人很难看到差异。
The Abstract Factory pattern uses subclassing (of factories) to produce other objects (non-factories). Abstract Factory also envisions that the objects produced belong to parallel hierarchies (e.g. to handle platform independance, one hierarchy for each platform).
The Builder pattern uses subclassing to produce "output" - which is not necessarily objects at all. The GOF example has the Builder producing text output (markup or otherwise).
The Factory Method pattern, unlike the other two, divides the "creator" into an abstract and concrete implementation (thus the emphasis on it belonging to a framework implementation). Like Abstract Factory, it deals with making actual objects.
All three are highly similar, because they all use subclassing. It is the subclassing that is the outstanding quality of them all, which hides the subtle differences (outlined above) and thus many people have difficulty seeing the differences.
抽象工厂对于测试驱动开发和减少耦合特别有帮助。
例如,在 C# 中:
这样,您可以使用依赖注入来注入生产代码的默认实现,然后您可以轻松模拟工厂及其创建的对象。
Abstract Factory is particularly helpful for test driven development and reducing coupling.
For example, in C#:
This way, you can use dependency injection to inject the default implementations for production code, and then you can easily mock the factory and the objects it creates.
请访问以下网址了解更多详细信息。
http://xeon2k.wordpress.com
Please visit the following url for more details.
http://xeon2k.wordpress.com