在Java中,没有像C ++那样的全局访问。那么如果他们想要创建一个可以从任何类访问的对象容器,他们会怎么做?或者说一个拥有全局值的java bean。
例如,如果我正在制作电梯模拟器,那么所有人都需要知道的字段int numElevators
必须放在哪里?与电梯Elevators[] elevators
的集合对象相同。
我可以想到一种方法是创建一个单例类来存储所有这些全局变量。然后使用静态方法提供来自任何类的访问。但是有更优雅的解决方案吗?
答案 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问题。