【发布时间】:2020-07-24 20:15:59
【问题描述】:
this tutorial的工厂明显违反了OCP。每次在系统中添加一个形状时,我们都需要在工厂中添加它来支持它。 我正在考虑另一种实现,我想知道是否有任何缺点。
public class ShapeFactory {
//use getShape method to get object of type shape
public Shape getShape(Class<? extends Shape> shapeType){
return shapeType.newInstance();
}
}
这个实现看起来不违反 OCP,也不复杂。有什么原因我找不到任何提到它的工厂设计模式教程?
【问题讨论】:
-
@Andreas,我可以在
.newInstance之前使用.getConstructor方法并将参数传递给newInstance。 -
@LeffeBrune 它没有提到我要问的实现
-
它没有提到它@Youssef13,因为你的实现不实用。正如 Andreas 提到的,要能够构造任何重要的对象,您需要传递构造函数参数。如果你的工厂不知道它创建的类型,它就无法知道如何实例化它们。
-
此外,工厂通常对客户端隐藏具体类型,但在您的情况下,您的客户端必须使用具体类型调用工厂。有点矛盾。
标签: java factory open-closed-principle