0

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

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

让我们假设:

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

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

我尝试使用 SingleTon 和 ClassLoader,但都没有奏效。

有什么建议吗?

4

3 回答 3

2

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

于 2012-05-02T22:14:41.473 回答
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 / 表演者:

String someString = MySingleton.getInstance().getString();
于 2012-05-02T22:02:26.810 回答
0

如果每个实例都有自己的实例JVM( Windowsjava.exe中的TaskManager中的一个),则不能共享MySerial. 您需要在两个应用程序的同一进程中初始化。您可以使用o 。enumSingleton

public class Main {
    enum MySerial { ... }
    public static void main(String... args) {
       Performer.main(args);
       GUI.main(args);
    }
}
于 2012-05-02T22:32:09.987 回答