有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java中全局访问的设计模式

在爪哇,没有像C++那样的全局访问。那么,如果他们想创建一个可以从任何类访问的对象容器,该怎么办呢?或者说一个持有全局值的Javabean

例如,如果我正在制作一个电梯模拟器,那么像int numElevators这样需要大家知道的字段必须放在某个地方,对吗?与电梯Elevators[] elevators的收集对象相同

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


共 (5) 个答案

  1. # 1 楼答案

    I can think of one way which is to create a singleton class to store all those global variables. Then use static methods to provide access from any class. But is there a more elegant solution?

    不,这就是方法。静态方法和单例的组合

  2. # 2 楼答案

    您可以创建一个具有所需字段的非单例类,并向任何需要它的人提供该类的实例

    尽量减少假定一个这样的上下文的代码量,使以后更容易适应多个上下文

    例如,您可能从一组电梯开始,但稍后需要多组电梯,用于不同的塔楼或建筑

  3. # 3 楼答案

    您可以创建一个包含大量公共静态字段的类。差不多

    class AppGlobals {
       public static final String IMPORTANT_STUFF = "something global...";
       ....
    
    }
    

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

    也可以将1和2组合起来

    编辑——对于您的电梯/建筑示例,适当的OO设计将消除对全局的需要

  4. # 4 楼答案

    如果你回避单态设计,你可能想研究单态设计范式。这里有一个很好的问题

    Monostate vs. Singleton

  5. # 5 楼答案

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

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