工厂方法模式带来的好处

我正在阅读Head First Design Patterns,并且我有一个问题。 在书的开头我看到了这个原则:

赞成'对象组合'超过'类继承

然后我看到了Factory Method

abstract class Creator{
   abstract Product create(String type);
}

和子类

class ConcreteCreator extends Creator{
    Product create(String type){
     //creation
    }
}

但是我们可以用简单工厂来编写我们的课程

class OurClass{
     SimpleFactory factory;
     void ourMethod(){
        Product product = factory.create(String type);
     }
     void setFactory(SimpleFactory factory){
        this.factory = factory;
     }

interface SimpleFactory {
     Product create(String type);
}

class AnotherConcreteCreator implements SimpleFactory {
     Product create(String type){
      //creation
     }
}

从第二种方法,我们给予松散耦合和可互换。 但工厂方法存在 - 所以有人需要它。 工厂方法的优点是什么?


首先,区分工厂方法模式和抽象工厂模式很重要,因为这可以看到抽象工厂模式和工厂方法之间的差异,以及为什么存在两种不同的模式:抽象工厂和工厂方法以及两者之间的基本区别工厂和抽象工厂模式? 正如你所看到的那样,这有点棘手,因此我在下面说的话必须用一粒盐来进行。

特别是,您的OurClass示例在我看来是抽象工厂模式的典型用例。 更具体地说,抽象工厂模式为您提供了灵活性,使创建对象的具体类型成为类的参数,并且它的典型用例可以是依赖注入(尽管这通常是以更自动化的方式完成的),另请参阅依赖注入vs工厂模式。

粗略地说,在抽象工厂模式中,您将对象的构造委派给外部类(通常,该类不仅负责创建一个而且还负责创建多个相关对象),而在工厂方法模式中,您可以委托构造对象到子类。 您也可以认为抽象工厂模式为其创建方法使用了工厂方法模式。

因此,关于何时使用工厂方法模式的问题的一个简单答案如下所示:当创建对象是子类的责任时。 这意味着,只有子类应该或可以决定需要创建什么对象,因此是子类行为的一个方面,这将我们带回到您最初的假设的整个圆圈,并归结为以下问题:何时应该使用继承? ,分别比继承更喜欢构图?

另一方面,抽象工厂模式可用于您描述的情况,当外部因素决定需要创建哪些对象并且需要此灵活性时,可以证明代码所需的额外复杂性。

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

上一篇: Benefits from factory method pattern

下一篇: asp.net core service locator how to avoid in cosole application