工厂,抽象工厂和工厂方法

我对这三个术语非常困惑。

我的理解是:

  • 在工厂模式中,没有具体的工厂。 工厂根据参数建立新的对象。

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

  • 是对的吗?

    其他的区别是什么?

    此外,什么是工厂方法模式? 与工厂模式相同吗?


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

    工厂方法

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

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

    这不是一个很好的例子,因为Factory Method的一个重要部分是多态。 如果我可以扩展document以定义另一个定义另一个createElement类,这将是主要的Factory Method材质。

    抽象工厂

    抽象工厂的目的是“提供一个界面,用于创建相关或依赖对象的族,而无需指定具体的类。

    典型的直销例子是Widget工厂; 早在GoF发布的那一天,跨平台的GUI开发有点麻烦,所以你可以定义一个抽象的Widget工厂类。

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

    附录 - 混凝土工厂

    我相信Concrete Factory是抽象工厂或工厂方法的非抽象实现。

    所以,当我编写自己的覆盖createElementdocument ,我创建的类是一个混凝土工厂。

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


    最好的学习方式是明确的阅读。 看看这个: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/是学习设计模式的好地方


    工厂模式:返回一个家庭的对象
    ABSTRACT FACTORY:返回多个家庭的对象。

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

    链接地址: http://www.djcxy.com/p/50117.html

    上一篇: Factory, Abstract Factory and Factory Method

    下一篇: Design Patterns: Factory vs Factory method vs Abstract Factory