在GoF的Factory Method Design模式中,我可以看到FactoryMethod()方法没有接受任何参数。我的理解是FactoryMethod应该传递一个参数,该参数将在switch case中使用,然后根据switch case中的值,实例化不同的类对象并返回给调用者。我总结的问题如下:
1)我应该以GoF定义的相同方式实现工厂方法模式。我也指的是www.dofactory.com上提供的工厂方法模式的UML图。)
2)为什么GoF的工厂方法模式没有显示接受参数?
答案 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而且没有相同的优势。