简单标记与简单继承设计:哪种扩展更好?

时间:2016-04-23 14:13:49

标签: java scalability

我有一个非常简单的基于值的类,旨在用于应用程序服务器环境。我想选择一种能够实现最佳可扩展性的设计(这些简单的类是说明性的):

标记:

public class Value {
    private final long    m_value;
    private final boolean m_kind;

    private Value(long value, boolean tag) { 
        this.m_value = value; 
        this.m_kind  = tag;
    }

    public long getValue()  { return m_value; }
    public boolean kindOf() { return m_kind; }

    public static Value of(long value, boolean tag) {
        return new Value(value, tag);
    }
}

标记的Value类是一个简单的类,没有可访问的构造函数和一个静态工厂方法,它包含一个标记m_kind的字段,即一个描述该值的特殊属性的字段(确切地说不是对这个例子很重要)。因为这是一个标记类,所以它也可以使用继承层次结构来表示:

层次:

public abstract class Value {
    private final long    m_value;

    private Value(long value) { 
        this.m_value = value; 
    }

    public long getValue()  { return m_value; }
    public abstract boolean kindOf();

    public static Value of(long value, boolean kind) {
        return (kind) 
            ? new TrueValue(value);
            : new FalseValue(value);
    }
}

public class TrueValue extends Value {

    TrueValue(long value) { super(value); }

    @Override
    public boolean kindOf() { return true; }
}

public class FalseValue extends Value {

    FalseValue(long value) { super(value); }

    @Override
    public boolean kindOf() { return false; }
}

从客户端的角度来看,这两个解决方案的行为完全相同。

Tagged解决方案需要一个额外的实例字段来描述对象的完整状态,而Hierarchical解决方案中的状态部分由层次结构本身描述,因此需要少一个字段(但它确实需要一个层次结构)。

在资源受限的Java服务器环境中,哪些解决方案提供了更好的可扩展性,或者差异是否太小而不重要?

0 个答案:

没有答案