基于单个值使用不同的类

时间:2012-09-19 09:42:09

标签: java android design-patterns

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

假设INFO是一个布尔值。根据其值,我的代码必须使用某个类A的实例或某个类B。请注意,对于每个AB是其子类。应用程序启动时会设置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号。你说什么?

2 个答案:

答案 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?它也是如此,但代码更多。