关于设计模式:工厂,抽象工厂和工厂方法

Factory, Abstract Factory and Factory Method

这三个术语我真的很困惑。

我的理解是:

  • 在工厂模式中,没有混凝土工厂。工厂根据参数构建新对象。

  • 在抽象的工厂模式中,有多个具体的工厂。客户必须明确创建不同的具体工厂。

对吗?

其他的区别是什么?

此外,什么是工厂方法模式?它和工厂的样式一样吗?


四人帮"设计模式;可重用面向对象软件元素"一书包含两个条目,"抽象工厂"(又称"虚拟构造函数")和"工厂方法"…我不知道"混凝土工厂",我听过这个词,但从来没有考虑过。

工厂法

在"工厂方法"中,一个对象有一个方法,负责实例化另一个对象。一个常见的例子是javascript文档对象和创建HtmlElement对象:

1
var newDiv = document.createElement('div');

但这不是一个很好的例子,因为工厂方法的一个重要部分是多态性。如果我可以扩展document来定义另一个类,定义另一个createElement,这将是主要的工厂方法材料。

抽象工厂

抽象工厂的意思是"提供一个接口来创建相关或依赖对象的族,而不指定具体的类"。

典型的直接出书的例子是一个小部件工厂;早在GoF发布的那一天,跨平台的GUI开发就有点麻烦,所以您可以定义一个抽象的小部件工厂类。

该类可以有方法createWindowcreateButtoncreateScrollBar等。反过来,将定义几个实现来生成Swing小部件或awt或其他东西。然后,根据配置,将实例化不同的类。

附录-混凝土工厂

我认为具体工厂是任何抽象工厂或工厂方法的非抽象实现。

所以,当我编写自己的document的泛化,它覆盖createElement,我创建的类是一个具体的工厂。

同样,虽然WidgetFactory是一个抽象工厂,但SwingWidgetFactory是一个混凝土工厂。


工厂模式:返回一个族的对象
抽象工厂:返回多个族的对象。

所以你可以说抽象工厂包含多个工厂


最好的学习方法就是明确地阅读。看看这个:http://www.dofactory.com/patterns/patterns.aspx。

工厂方法将对象的创建推迟到子类。这意味着定义了一个基类/接口,但是客户机代码不会针对这个接口创建一个对象。实现接口的子类被留下来初始化对象。

抽象工厂可在以下网址找到:http://www.dofactory.com/patterns/patternastract.aspx u self2

那个网站上已经有很好的信息了。接下来最好的方法是检查wiki:

http://en.wikipedia.org/wiki/designu patternu28computeru science%29

http://javadesign-patterns.blogspot.com/是学习设计模式的好地方