设计两个实现类中的运行时选择

时间:2012-11-01 07:31:24

标签: java oop

我目前为这样的常量定义了一个类

public final class DataContainer{

    public static final String x1="a";    
    public static final String x2="b";
     ...
    public static final String xn="z";    

}

&安培;只需访问以下内容即可使用这些:DataContainer.x1

但是现在我需要定义这个常量文件的两个实现(DataContainer1& DataContainer2)&在运行时选择要在整个应用程序中使用的两个实现类常量中的哪一个,而不会在DataContainer1.x1DataContainer2.x1的任何位置进行更改。

我该如何实现这样的设计?

1 个答案:

答案 0 :(得分:1)

你应该放弃常量的static final实现。

首先使用静态/最终常量的主要优点是编译器在编译时已经可以访问这些值,因此可以执行各种优化。

但是因为你需要能够在运行时交换常量的实际值,所以无论如何都会消失这种优势。严格来说,可以说最严格意义上的值不再是常量,因为它们实际上是变量

我可能只是想要一个非常简单和经典的OO结构,你可以在这里建立一个类似于地图的界面,以及它们的不同实现。

public interface Constants {
    public String get(String value);
}

(事实上,切换到java.util.Mapjava.util.Properties可能已经做了你正在寻找的事情。)

当然,您可能仍希望将该接口的各个实现中的值定义为static final

如果您非常喜欢静态访问,则可以使用Factory模式在运行时检索常量的实际实例。这也将使你在你的同事中看起来像一个经过认证的Java大师; - )