将另一个类的对象传递给单例类

时间:2014-03-05 09:24:45

标签: java singleton

我在Java中使用这个单例类,在一个方法中,我需要一个在Main中实例化的类的对象。我不知道如何将该对象传递给此方法,因为此代码是在singleton类的构造函数中编写的,因为我需要在程序启动时立即执行该代码。

我应该从构造函数中取出代码并将其作为一个独立的方法,我从Main调用它(虽然我不喜欢这个)或者还有另一种方法吗?

有什么想法吗?

代码:

主:

public static void main(String[] args) {
    X x; // This is the object I need to pass to the singleton class
}

Singleton类:

public SomeSingletonClass {

    private Queue<Y> someQueue; // Y is another class I have in my project
    private SomeSingletonClass(){
        someQueue.add(new Y(<some data>, <some data>, <here I need an object of X as the constructor needs it>);
    }
}

我还没有添加整个代码。只是我被卡住的片段。

1 个答案:

答案 0 :(得分:1)

您有两个主要选择。

第一个会产生嘲笑的嚎叫 - 这是正确的,因为它是一个黑暗的地狱隧道。

public class X {

}

public class Y {

    public Y(String s, X x) {

    }
}

public class Main {

    public static X x = new X();
}

public class SomeSingletonClass {

    private Queue<Y> someQueue = new LinkedList<>();;

    private SomeSingletonClass() {
        someQueue.add(new Y("Hello", Main.x));
    }

}

在这里,我们将X Main创建为public static,因此它现在基本上是与您的单身人士并行的全局状态。

大多数读者会理解这是多么令人讨厌,但它是最简单的解决方案,因此通常是采取的解决方案。

第二种选择是懒惰的构造。

public class BetterSingletonClass {
    private BetterSingletonClass me = null;
    private Queue<Y> someQueue = new LinkedList<>();

    private BetterSingletonClass(X x) {
        someQueue.add(new Y("Hello", x));
    }

    public BetterSingletonClass getInstance (X x) {
        if ( me == null ) {
            me = new BetterSingletonClass(x);
        }
        return me;
    }

}

请注意,我没有努力使它成为一个真正的单身人士,或者这是线程安全的。您可以在其他地方搜索thread safe singleton以获取大量示例。