如何使用对象的相同实例

时间:2012-05-02 21:55:48

标签: java singleton instance

我想知道是否有一种简单的方法可以在Java中使用相同的对象实例。

我有一个MySerial类,用于通过串口通信(我使用的是RXTX库,但它与问题无关)。

我们假设:

  • 有一个带有“连接”按钮的GUI,点击它会实例化MySerial对象并连接到串口;
  • 有一个由线程驱动的Performer类,每两秒通过串行发送一条消息(如果连接可用);

我希望GUI中使用的MySerial的相同实例与Performer类中使用的相同。问题是Performer和GUI彼此不了解:就像它们是两个独立的程序一样,所以我不能只将MySerial传递给构造函数。

我尝试使用SingleTon和ClassLoader,但没有一个工作。

有什么建议吗?

3 个答案:

答案 0 :(得分:2)

尽管Singleton模式可以解决您的问题 - 但这不是您经常使用的东西(不惜一切代价避免它)。 为什么不简单地将引用发送给对象?如果它太难了,您可能会遇到一些架构问题。修复架构 - 不要避免单例模式的问题,否则你会发现自己陷入了很多混乱!

答案 1 :(得分:0)

似乎单身模式就是你所需要的。它实现起来相当简单,不应该出问题(根据你描述的内容)例如:

public class MySingleton {

    private static MySingleton instance;

    private MySingleton() {}

    public static MySingleton getInstance() {
        if (instance == null)
            instance = new MySingleton();
        return instance;
    }

    private String s = "hello";
    public String getString() {
        return s;
    }

}

来自GUI / Performer:

String someString = MySingleton.getInstance().getString();

答案 2 :(得分:0)

如果每个实例都有自己的JVM(Windows中 TaskManager 中的一个java.exe),则无法共享MySerial的同一个实例。您需要在相同的流程两个应用程序中使用 init 。您可以使用enum o Singleton

public class Main {
    enum MySerial { ... }
    public static void main(String... args) {
       Performer.main(args);
       GUI.main(args);
    }
}