Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 为什么工厂方法不在GoF工厂方法中使用参数_Oop_Design Patterns - Fatal编程技术网

Oop 为什么工厂方法不在GoF工厂方法中使用参数

Oop 为什么工厂方法不在GoF工厂方法中使用参数,oop,design-patterns,Oop,Design Patterns,在GoF的Factory方法设计模式中,我可以看到FactoryMethod()方法不接受任何参数。我的理解是,应该向FactoryMethod传递一个参数,该参数将在switch案例中使用,然后根据switch案例中的值实例化不同的类对象并返回给调用方。我的问题总结如下: 1) 我是否应该以GoF定义的方式实现工厂方法模式。我还参考了www.dofactory.com上关于工厂方法模式的UML图) 2) 为什么GoF的工厂方法模式没有显示接受参数 1) 我应该执行工厂方法吗 模式,完全相同 由

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

1) 我是否应该以GoF定义的方式实现工厂方法模式。我还参考了www.dofactory.com上关于工厂方法模式的UML图)

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

1) 我应该执行工厂方法吗 模式,完全相同 由GoF定义。我也指的是 UML图见www.dofactory.com 对于工厂方法模式)

做任何对你有意义的事。模式只是指导方针,而不是自然法则

除此之外,GoF中的模式并不全面。你会发现自己发现并实现了一些从未出现在书中,甚至连名字都没有的模式。这是件好事

2) 为什么是工厂方法模式 未显示GoF的接受参数

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

因此,使用上的示例,这些类返回一组固定的对象。原则上没有任何东西阻止用户将某些参数传递给工厂方法

我的理解是 应向FactoryMethod传递一个 将在中使用的参数 开关箱,然后根据 开关盒中的值,不同 类对象被实例化并 返回给打电话的人

如果这对你有意义的话,你当然可以用这种方式实现它

2) 为什么是工厂方法模式 未显示GoF的接受参数

在面向对象编程中,您的方法应该做一件明确定义的事情。传递某种要打开的值称为“交替内聚”:相反,该方法应该被分成多个方法,每种情况一个。例如:

createVeggie(veggieType)
将被分成

createBroccoli()
createCelery()
createCollaredGreens()
这使类接口更干净,更容易修改,并改进编译时检查

另外,要注意不要违反工厂方法的意图:它实际上是为了避免调用代码知道创建了哪个对象。正如Juliet所说,您可以实现类似的东西,但它不再是GoF工厂方法,也没有相同的优势