在Java中,没有类似于C++的全局访问。那么如果他们想创建一个可以从任何类访问的对象的容器,会怎么做呢?或者说一个拥有全局值的java bean。Java中的全局访问
例如,如果我正在制作电梯模拟器,那么需要知道所有像int numElevators
这样的字段必须放置在正确的位置?与电梯的收集对象Elevators[] elevators
一样。
我能想到的一种方法是创建一个单例类来存储所有这些全局变量。然后使用静态方法提供来自任何类的访问。但是,有没有更优雅的解决方案?
在Java中,没有类似于C++的全局访问。那么如果他们想创建一个可以从任何类访问的对象的容器,会怎么做呢?或者说一个拥有全局值的java bean。Java中的全局访问
例如,如果我正在制作电梯模拟器,那么需要知道所有像int numElevators
这样的字段必须放置在正确的位置?与电梯的收集对象Elevators[] elevators
一样。
我能想到的一种方法是创建一个单例类来存储所有这些全局变量。然后使用静态方法提供来自任何类的访问。但是,有没有更优雅的解决方案?
我期望Building
的实例有一个Elevators
的集合。我认为一个项目中真正具有全球性的东西很少,你通常可以找到一些应该包含和分配这些知识的管理实体。
通过在这样一个实体中绑定这个,你可以a)更容易地控制访问和更改/重构b)模拟这个并使测试更容易。
你可以用一堆公共静态字段创建一个类。类似于
class AppGlobals {
public static final String IMPORTANT_STUFF = "something global...";
....
}
或者您可以读取属性配置以获取简单的数据,比如字符串和whatnot。
也可以组合使用1名2
编辑 - 为您的电梯/楼宇例如,适当的面向对象的设计将消除对全局的需要....
我能想到的一个这种方法是创建一个单例类来存储所有这些全局变量。然后使用静态方法提供来自任何类的访问。但是,有没有更优雅的解决方案?
不,就是这样做。静态方法和单例的组合。
我有一个单身建筑类,但始终调用Building.getElevators()似乎不雅。 – Steve 2011-02-01 19:46:11
您可以使用所需字段创建一个非单例类,并为其提供任何需要的实例。
最大限度地减少代码的数量,假定单个这样的上下文使得稍后可以更容易地适应多个上下文。
例如,您可能从一组电梯开始,但后来需要多组不同的塔楼或建筑物。
如果你想避开Singleton,你可能想看看Monostate Design Paradigm。这是一个很好的StackOverflow问题。
通常情况下,一个相当优雅的解决方案是不使用全局或等同的东西;) – delnan 2011-02-01 19:32:31
想必电梯在建筑物?建筑类将是有意义的。 – diagonalbatman 2011-02-01 19:34:17