为什么工厂方法不参加GoF工厂方法中的参数

时间:2010-01-29 04:19:53

标签: oop design-patterns

在GoF的Factory Method Design模式中,我可以看到FactoryMethod()方法没有接受任何参数。我的理解是FactoryMethod应该传递一个参数,该参数将在switch case中使用,然后根据switch case中的值,实例化不同的类对象并返回给调用者。我总结的问题如下:

1)我应该以GoF定义的相同方式实现工厂方法模式。我也指的是www.dofactory.com上提供的工厂方法模式的UML图。)

2)为什么GoF的工厂方法模式没有显示接受参数?

2 个答案:

答案 0 :(得分:1)

  

1)我应该实施工厂方法   模式,完全以同样的方式   由GoF定义。我也是指   UML图在www.dofactory.com上给出   对于工厂方法模式)。

做任何有意义的事情。模式只是指导原则,而不是自然界的分类法则。

更重要的是,GoF中的模式并不全面。你会发现自己发现并实现了从未出现在书中的模式,甚至没有名字。这是好事

  

2)为什么是工厂方法模式   GoF没有显示接受参数?

工厂方法模式只是派生类的特殊实例。特别是,您有一个带抽象方法的抽象类,以及实现该方法的任意数量的派生类。通常,这个实现的方法返回一些其他类型的对象 - 这就是使它成为创造模式的原因。

因此,使用DoFactory.com上的示例,类返回一组预设的对象。原则上什么都不会阻止用户将某些参数传递给工厂方法。

  

我的理解是   FactoryMethod应该通过了   将在...中使用的参数   切换案例,然后根据   在开关盒中的值,不同   类对象被实例化   返回给来电者。

如果对你有意义的话,你当然可以这样实现。

答案 1 :(得分:0)

  

2)为什么是工厂方法模式   GoF没有显示接受参数?

在面向对象的编程中,你的方法应该做一个明确定义的事情。传递某种值来开启称为“交替凝聚力”:相反,该方法应该是多种方法,每种方法一种。例如:

createVeggie(veggieType)

将分成

createBroccoli()
createCelery()
createCollaredGreens()

这使您的类界面更清晰,促进更容易修改,并改进编译时检查。

另外,请注意不要违反Factory Method的意图:实际上避免让调用代码知道创建了哪个对象。正如朱丽叶所说,你可以实现类似的东西,但它不再是GoF Factory Method而且没有相同的优势。