У меня есть фабрика, которая может строить много типов объектов и может расти.Использование отражения на заводе
Было бы неплохо использовать отражение для возврата всех разных типов вместо вызова каждого метода в методе 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: Улучшен пример, если кто-то его использует.
Да, это хорошая практика: http://www.codeproject.com/Articles/ 37547/Exploring-Factory-Pattern В C# – zzfima
Если вы можете позволить себе цену исполнения рефлексии, то да нет причины не упрощать жизнь. Но убедитесь, что стоимость приемлема. – Thihara