3

我正在开发一个应用程序,它应该基于一条信息使用不同的类类型。为了更好地说明我的问题,让我举个例子:

假设INFO是一个布尔值。根据它的值,我的代码必须使用 some classA或 some class的实例B。请注意,对于每个A,B都是它的子类。INFO在应用程序启动时设置,并且在整个应用程序生命周期中不会更改。

我的问题:实现这一点的最佳方法是什么?

以下是我提出的一些方法,但请随时建议其他方法:

1.带有方法的工厂类:

public static A getA(final boolean INFO) {
    return INFO ? new A() : new B();
}

2. 包装类:

class WrapperForSomeClass {

    public final A instance;

    public WrapperForSomeClass(final boolean INFO) {
        instance = INFO ? new A() : new B();
    }

}

3.接口+工厂类:

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 号。你说什么?

4

2 回答 2

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);
    }
}
于 2012-09-19T09:48:52.553 回答
0

1 是最短和最干净的。将此方法放入A类中,以免创建多余的工厂类。

为什么你会选择3?它的作用相同,但代码更多。

于 2012-09-19T10:18:24.073 回答