我正在开发一个应该根据单条信息使用不同类类型的应用程序。为了更好地说明我的问题,让我举一个例子:
假设INFO
是一个布尔值。根据其值,我的代码必须使用某个类A
的实例或某个类B
。请注意,对于每个A
,B
是其子类。应用程序启动时会设置INFO
,并且在整个应用程序生命周期内都不会更改public static A getA(final boolean INFO) {
return INFO ? new A() : new B();
}
。
我的问题:实现此的最佳方式是什么?
以下是我提出的一些方法,但可以随意提出其他方法:
1。工厂类的方法:
class WrapperForSomeClass {
public final A instance;
public WrapperForSomeClass(final boolean INFO) {
instance = INFO ? new A() : new B();
}
}
2。包装类:
public interface IWrappable<T> {
T get(final boolean INFO);
}
private static final IWrappable<A> WRAPPER_FOR_A = new IWrappable<A>() {
public A get(final boolean INFO) {
return INFO ? new A() : new B();
}
};
public static A getA(final boolean INFO) {
return WRAPPER_FOR_A.get(INFO);
}
第3。接口+工厂类:
{{1}}
如果我必须选择,我会选择3号。你说什么?
答案 0 :(得分:0)
我会这样做:
class A
{
}
class B extends A
{
}
class AFactory
{
public A getInstance(boolean info)
{
return info ? new A() : new B();
}
}
class MyMainLauncher
{
private AFactory aFactory;
private A instance;
{
// has access to the boolean value `info`.
instance = aFactory.getInstance(info);
}
}
答案 1 :(得分:0)
1是最短且最干净的。将此方法放入A类中,以便不创建冗余工厂类。
你为什么要去3?它也是如此,但代码更多。