2015-01-13 2 views
1

Я не могу понять, как Enum можно использовать для создания потокобезопасных однопользовательских экземпляров. Итак, скажем, у меня есть класс А, который я хочу сделать синглтон. Как мне это сделать с помощью Enum? Я наткнулся на предложение, как на приведенный ниже код, но на самом деле не способен понять. В ниже я должен заменить INSTANCE на A singleObj = new A();?thread safe singleton using enum

Кроме того, как именно следует класс А выглядеть как ни в чем, что я должен заботиться о там .. например: сделать конструктор частные и т.д.

public enum EasySingleton{ 
    INSTANCE; 
} 

ответ

2

В ниже я должен заменить ИНСТАНЦИИ с A singleObj = new A();?

У вас нет. Вы можете использовать:

EasySingleton instance = EasySingleton.INSTANCE; 

Вы пишете синглтон так же, как обычный класс, с любой методы, которые вы хотите и т.д. - но не публичные конструкторы (которые не являются действительными в любом случае перечислений).

+0

Спасибо @Jon. Но я все еще не понял. Значит ли это, что в конце EasySingleton будет моим одиночным классом? – Walt

+0

@Walt: Да, точно. Это singleton, потому что есть только одно допустимое значение ('INSTANCE'). Вы все равно можете реализовать интерфейсы и т. Д. –

+0

Спасибо Jon. Спасибо, что терпеливы со мной. Излишне говорить, что я новичок в мире кодирования. :) – Walt

0

Как Джон упомянул вы могли бы сделать следующее:

EasySingleton instance = EasySingleton.INSTANCE; 
instance.doSomething(); 

Если вам нужны дополнительные примеры, а также плюсы/минусы для многих из подходов к созданию классов Singleton вы можете посетить: http://avaldes.com/creating-a-thread-safe-singleton-class-with-examples/.