2015-05-31 3 views
0

Я понимаю, что следующий фрагмент кода всегда дает один и тот же экземпляр всегда, а также не может быть изменен и лучше всего рекомендуется для однопоточного/многопоточного использования.Как использовать перечисление для шаблона одноэлементного дизайна?

enum Colors { 
    RED, BLUE, GREEN; 
} 

Но я хочу знать, как использовать перечисление для применения одноэлементного шаблона для пользовательских классов, я имею в виду, где мы обычно делаем инициализацию, а затем возвращает экземпляр. Приведя пример, мы сможем помочь.

+0

Возможный дубликат [Singleton Pattern: Use Enum Version] (http://stackoverflow.com/questions/23721115/singleton-pattern-using-enum-version) –

+0

Но он по-прежнему не отвечает на возможные инициализации, чтобы создать пример. – xploreraj

+1

Перечисление может иметь конструктор. Вы выполняете инициализацию. –

ответ

1

Вы можете сделать инкапсуляцию и инициализацию так же, как в классе.

Вот простой пример:

public enum Color{ 
    INSTANCE(10, 30, 50); 

    private int red, green, blue; 

    private Color(int red, int green, int blue){ 
    this.red = red; 
    this.green = green; 
    this.blue = blue; 
    } 

    public int getRed(){ 
    return red; 
    } 

    public int getGreen(){ 
    return green; 
    } 

    public int getBlue(){ 
    return blue; 
    } 
} 

В этом случае у вас есть Потокобезопасная одноплодная экземпляр типа перечисления Color.

+2

Имейте в виду, что перечисления предназначены для хранения констант или, другими словами, списка объектов, принадлежащих одному типу. Если вам нужен потокобезопасный синглтон, то сделайте свой класс инициализации singleton потокобезопасным, используя ключевое слово synchronized. – malinkody

+0

Если поля не являются окончательными, а сеттеры присутствуют, то также в переписках синхронизация должна применяться так же, как и обычные классы, чтобы сделать их потокобезопасными? И перечисляет, по умолчанию, только свойство одиночных элементов, так как на них не влияет видимость конструктора во внешний мир. – xploreraj

Смежные вопросы