2013-11-11 4 views
0

Рассмотрим следующую реализациюПеречисления и Singletons

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"); 
    } 
} 

Здесь я попытался реализовать Singleton с помощью enum. Я хочу, чтобы OnlyOne имел только один экземпляр. Мой вопрос заключается в том, как ограничить клиентов от экземпляров объектов класса OnlyOne? Потому что в каком-то другом классе мы можем легко сделать это

OnlyOne one = new OnlyOne(); 

я не могу предоставить приватный конструктор для этого, так как это нарушит этот

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

мне нужно использовать перечисление в качестве внутреннего элемента Do OnlyOne класс? Какие-либо предложения?

+1

с момента главной заботой является то, что вы не хотите, чтобы создать более одного экземпляра вы можете сделать класс 'onlyOne', как синглтон – Rohit

ответ

3

ИНСТАНЦИЯ сама по себе является синглом. Добавьте свой метод непосредственно в перечисление.

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

public enum Singleton { 
    INSTANCE; 
    public void method() { 
     System.out.println(this); 
    } 
} 
+0

о да! Я этого не осознавал :-) То, что я пытаюсь достичь, совершенно не связано. – Nishant