多くの種類のオブジェクトを構築できるファクトリがあり、それは成長する可能性があります。
メソッド内のすべてのメソッドを呼び出すのではなく、リフレクションを使用してすべての異なる型を返すことをお勧めします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: 誰かが使用する場合に備えて例を改善しました。