Java中全局访问的设计模式
在爪哇,没有像C++那样的全局访问。那么,如果他们想创建一个可以从任何类访问的对象容器,该怎么办呢?或者说一个持有全局值的Javabean例如,如果我正在制作一个电梯模拟器,那么像int numElevators
这样需要大家知道的字段必须放在某个地方,对吗?与电梯Elevators[] elevators
的收集对象相同
我可以想出一种方法,创建一个单例类来存储所有这些全局变量。然后使用静态方法提供来自任何类的访问。但是有更优雅的解决方案吗
你可以在下面搜索框中键入要查询的问题!
例如,如果我正在制作一个电梯模拟器,那么像int numElevators
这样需要大家知道的字段必须放在某个地方,对吗?与电梯Elevators[] elevators
的收集对象相同
我可以想出一种方法,创建一个单例类来存储所有这些全局变量。然后使用静态方法提供来自任何类的访问。但是有更优雅的解决方案吗
# 1 楼答案
不,这就是方法。静态方法和单例的组合
# 2 楼答案
您可以创建一个具有所需字段的非单例类,并向任何需要它的人提供该类的实例
尽量减少假定一个这样的上下文的代码量,使以后更容易适应多个上下文
例如,您可能从一组电梯开始,但稍后需要多组电梯,用于不同的塔楼或建筑
# 3 楼答案
您可以创建一个包含大量公共静态字段的类。差不多
或者,您可以读取属性配置,以获取字符串等简单数据
也可以将1和2组合起来
编辑——对于您的电梯/建筑示例,适当的OO设计将消除对全局的需要
# 4 楼答案
如果你回避单态设计,你可能想研究单态设计范式。这里有一个很好的问题
Monostate vs. Singleton
# 5 楼答案
我希望一个
Building
的实例有一个Elevators
的集合。我认为一个项目中很少有真正全球化的东西,你通常可以找到一些管理实体来包含和传播这些知识通过将其绑定到这样一个实体中,您可以a)更容易地控制访问和更改/重构b)模拟这一点并使测试更容易