【发布时间】:2013-03-27 16:16:19
【问题描述】:
我有一个工厂,可以构建多种类型的对象,并且它可能会增长。
使用反射返回所有不同的类型而不是调用getPrototypes() 方法中的每个方法会是一个好主意吗?
反射后看起来像这样:
public final class ShapeFactory
{
private ShapeFactory(){} // no instance
public static Shape buildSquare()
{
return new Square(2);
}
public static Shape buildCircle()
{
return new Circle(2);
}
public static Shape buildTriangle()
{
return new Triangle(2, 2, 2);
}
// and many more shapes...
public static List<Shape> getPrototypes()
{
final List<Shape> prototypes = new ArrayList<>();
// using reflection, call every build function
final Method[] methods = ShapeFactory.class.getMethods();
for(final Method picked : methods)
{
if(picked.getReturnType() == Shape.class && picked.getParameterTypes().length == 0)
{
try
{
prototypes.add((Shape)picked.invoke(null));
}
catch(final Exception e)
{
// this is an example, do not ignore
// exceptions in real code
}
}
}
return prototypes;
}
}
很抱歉使用 Shape 示例。
编辑:形状是可克隆的原型。 编辑 #2:改进示例以防有人使用它。
【问题讨论】:
-
是的,这是一个好习惯:codeproject.com/Articles/37547/Exploring-Factory-Pattern In c#
-
如果你能负担得起反射的性能成本,那么是的,没有理由不让生活变得更简单。但请确保费用是可以接受的。
标签: java oop design-patterns reflection coding-style