我有许多实现相同接口的类.所有这些类的对象必须在主类中实例化.我试图以一种优雅的方式完成这件事(我想通过枚举).示例代码: -
public interface Intr {
//some methods
}
public class C1 implements Intr {
// some implementations
}
public class C2 implements Intr {
// some implementations
}
...
public class Ck implements Intr {
// some implementations
}
public class MainClass {
enum ModulesEnum {
//Some code here to return objects of C1 to Ck
FIRST {return new C1()},
SECOND {return new C2()},
...
KTH {return new Ck()};
}
}
Run Code Online (Sandbox Code Playgroud)
现在在上面的例子中,我可以通过一些优雅的方式获得C1类到Ck类的新对象的实例.或者也可以理解任何其他更好的机制而不是枚举.
enum ModulesEnum {
FIRST(new C1()), SECOND(new C2()); // and so on
private ModulesEnum(Intr intr) { this.obj = intr; }
private Intr obj;
public Intr getObj() { return obj; }
}
Run Code Online (Sandbox Code Playgroud)
希望有所帮助.诀窍是为每个枚举添加一个实现.如果要访问该对象,请使用getter.
ModulesEnum.FIRST.getObj();
Run Code Online (Sandbox Code Playgroud)
如果您Intr和它的实现是package protected,您可以ModulesEnum公开来公开实现.这样,每个实现只能有一个实例,使它们singleton不显式使用模式.
Factory如果您打算为每个实现创建多个实例,您当然也可以使用它.