首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >工厂、抽象工厂和工厂方法

工厂、抽象工厂和工厂方法
EN

Stack Overflow用户
提问于 2010-01-17 03:58:50
回答 3查看 11.1K关注 0票数 43

我真的对这三个术语感到困惑。

我的理解是:

  • 在工厂模式中,没有混凝土工厂。工厂根据参数建立新的对象,
  • 采用抽象工厂模式,有多个具体工厂。客户端必须显式地创建不同的具体工厂。

是那么回事吗?

其他的区别是什么?

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-01-17 05:11:12

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

工厂法

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

代码语言:javascript
运行
复制
var newDiv = document.createElement('div');

不过,这不是一个很好的例子,因为Factory方法的一个重要部分是多态。如果我能够扩展document来定义另一个定义另一个createElement的类,这将是主要的createElement方法材料。

抽象工厂

抽象工厂的意思是“提供一个接口,用于创建相关或依赖对象的系列,而不指定具体的类。

典型的直截了当的例子是Widget;在GoF发布的时候,跨平台的GUI开发有点麻烦,所以您可以定义一个抽象的小部件工厂类。

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

补强-混凝土厂

我认为混凝土工厂是抽象工厂或工厂方法的任何非抽象实现。

因此,当我编写我自己的document泛化(它覆盖了createElement )时,我创建的类是一个具体工厂。

同样,虽然WidgetFactory将是抽象工厂,但SwingWidgetFactory将是一个具体工厂。

票数 39
EN

Stack Overflow用户

发布于 2010-01-17 04:54:57

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

工厂方法将对象的创建推迟到子类。这意味着定义了一个基类/接口,但是客户端代码并没有针对这个接口创建一个对象。实现接口的子类仅用于初始化对象。

抽象工厂可以在这里找到:http://www.dofactory.com/Patterns/PatternAbstract.aspx#_self2

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

http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29

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

票数 4
EN

Stack Overflow用户

发布于 2010-05-19 04:29:45

工厂模式:返回一个家族的对象

摘要工厂:返回多个家族的对象。

因此,可以说抽象工厂包含多个工厂。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2079902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档