Java中的全局访问

时间:2011-02-01 19:30:33

标签: java design-patterns singleton global-variables

在Java中,没有像C ++那样的全局访问。那么如果他们想要创建一个可以从任何类访问的对象容器,他们会怎么做?或者说一个拥有全局值的java bean。

例如,如果我正在制作电梯模拟器,那么所有人都需要知道的字段int numElevators必须放在哪里?与电梯Elevators[] elevators的集合对象相同。

我可以想到一种方法是创建一个单例类来存储所有这些全局变量。然后使用静态方法提供来自任何类的访问。但是有更优雅的解决方案吗?

5 个答案:

答案 0 :(得分:4)

我希望Building的实例拥有Elevators的集合。我认为项目中很少有真正全球化的东西,你通常可以找到一些应该包含和分发这些知识的管理实体。

通过将其绑定在这样的实体中,您可以a)更轻松地控制访问和更改/重构b)模拟这个并使测试更容易。

答案 1 :(得分:1)

  

我可以想到一种方法是创建一个单例类来存储所有这些全局变量。然后使用静态方法提供来自任何类的访问。但是有更优雅的解决方案吗?

不,这是做到这一点的方法。静态方法和单例的组合。

答案 2 :(得分:1)

您可以使用所需的字段创建非单例类,并根据需要提供此实例。

最大限度地减少假定单个此类上下文的代码量,以便以后更容易适应多个上下文。

例如,您可以从一组电梯开始,但后来需要多套电梯,用于不同的电梯或建筑物。

答案 3 :(得分:0)

您可以使用一堆公共静态字段创建一个类。像

这样的东西
class AppGlobals {
   public static final String IMPORTANT_STUFF = "something global...";
   ....

}

或者您可以在属性配置中读取以获取简单数据,如字符串等等。

您还可以将1和2结合使用。

编辑 - 对于您的电梯/建筑物示例,正确的OO设计将消除对全局变量的需求....

答案 4 :(得分:0)

如果你回避单身人士,你可能想要研究Monostate设计范例。这是一个很好的StackOverflow问题。

Monostate vs. Singleton