0

次の実装を検討してください

public enum Singleton {

    INSTANCE;
    private final OnlyOne onlyOne;

    Singleton() {
        onlyOne = new OnlyOne();
    }

    public static Singleton getInstance() {
        return INSTANCE;
    }

    public static void main(String[] args) {

        Singleton one = getInstance();
        one.onlyOne.method();
    }

}

class OnlyOne {

    public void method() {
        System.out.println("Hello World");
    }
}

ここでは、を使用してシングルトンを実装しようとしましたenumOnlyOneインスタンスを 1 つだけ使用したい。私の質問は、クライアントがクラスのオブジェクトをインスタンス化するのをどのように制限するのOnlyOneですか? 他のクラスではこれを簡単に行うことができるため

OnlyOne  one = new OnlyOne();

プライベートコンストラクターを提供することはできません。これを行うとこれが壊れます

Singleton() {
  onlyOne = new OnlyOne();
}

OnlyOneクラスの内部メンバーとして列挙型を使用する必要がありますか? 助言がありますか?

4

1 に答える 1

3

INSTANCE 自体がシングルトンです。メソッドを列挙型に直接追加します。

public static void main(String[] args) {
    Singleton.INSTANCE.method();
}

public enum Singleton {
    INSTANCE;
    public void method() {
        System.out.println(this);
    }
}
于 2013-11-11T04:39:08.450 に答える