【问题标题】:Java: Using same instance of a class in various other classesJava:在其他各种类中使用类的相同实例
【发布时间】:2011-12-06 06:59:39
【问题描述】:

这可能是个愚蠢的问题,但我不知道答案,也不知道在哪里搜索答案,所以如果有人可以帮助我,那就太好了。

我有一个具有不同成员和方法的类(我们将其命名为 A)。我在另一个类中使用了这个类的方法(我们把它命名为 B)。

对于创建的每个 B 对象,我都想使用 A 的相同实例。这可能吗? 实际上我在 B 中有一个构造函数,我在其中调用 A a = new A();当然,我总是得到这个类的不同实例。

我现在该如何更改?我知道可以使用spring框架解决它(总是将相同的对象注入B的实例),但我不能使用它。这个问题还能怎么解决?

非常感谢您的帮助! :-)

【问题讨论】:

  • 非常感谢您的所有回答! :-)

标签: java oop architecture static constructor


【解决方案1】:

是的,这是可能的。您需要定义一个静态的 classA 单例实例,并在任何需要的地方使用它。

所以有多种方法可以做到这一点:

public class ClassA {
   public static ClassA classAInstance = new ClassA();  

}

然后在任何你可以做的地方

ClassA.classAInstance.whatever();

这很简单,但对您来说可能就足够了。

如果您真的想使用单例模式,请查看 here 以获取 Java 示例。这种方法的优点是它确保您只有 1 个 classA 实例。

【讨论】:

    【解决方案2】:

    详细说明其他答案:

    public class A
    {
    private static A instance;
    private A()
    {
        ...
    }
    
    public static A getInstance()
    {
        if (instance == null)
            instance = new A();
    
        return instance;
    }
    ...
    public void doSomething()
    {
        ... 
    }
    }
    

    然后像这样调用 B:

    A.getInstance().doSomething();
    

    【讨论】:

      【解决方案3】:

      听起来您可能希望 A 成为Singleton

      在软件工程中,单例模式是一种用于实现单例数学概念的设计模式,通过将类的实例化限制为一个对象。

      这意味着您现有的代码将不得不修改以使用某种getInstance() 方法,但是一旦进行了更改,B 类的所有实例都将使用 A 类的单个实例。

      这是一个直接链接到:simplest example from the above site.

      【讨论】:

        【解决方案4】:

        只需使用静态类并确保它是公开的。

        【讨论】:

          【解决方案5】:

          虽然你可以使用单例设计模式来共享同一个实例,但是如果你想使用带有参数的同一个实例(重载的构造函数)..你不能使用单例

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2013-09-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-01-31
            • 1970-01-01
            • 2015-08-15
            相关资源
            最近更新 更多