我有一個工廠,可以建立許多類型的對象,它可能會增長。在工廠中使用反射
使用反射返回所有不同的類型而不是調用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;
}
}
對不起,使用形狀的例子。
編輯:形狀是可複製的原型。 編輯#2:改善了這個例子,以防有人使用它。
是的,很好的做法:http://www.codeproject.com/Articles/ 37547 /探索 - 工廠模式 在c# – zzfima 2013-03-27 16:20:06
如果你能負擔得起反射的性能成本,那麼沒有理由不讓生活變得更簡單。但要確保成本是可以接受的。 – Thihara 2013-03-27 16:23:32