Singleton

Обеспечивает наличие в системе только одного экземпляра заданного класса, позволяя другим классам получать доступ к этому экземпляру.

 

 

В данном случае метод getInstance() является статическим (static), и для его вызова можно обращаться напрямую к классу, без создания его экземпляра:

Singleton my = Singleton.getInstance();

Переменная в которой содержиться единственный экземпляр этого класса является также статической и закрытой. Конструктор у такого класса так же закрытый, чтобы трибуты классы не могли создавать экземпляры этого класса. Экземпляр создаётся только один раз при инициализации класса class loader’ом.

 

Public class Singleton{

private static Singleton instance = new Singleton();

private Singleton(){}

private static Singleton getInstance(){return instance;}

}

 

Объекты типа singleton применяются для организации различного рода общедоступной информации – своего рода глобальные справочники. Нарпимер можно сделать некий справочник, где хранить разного рода конфигурационную информацию, доступную всем частям программы. Примером является java.lang.System.getProperties() – который возвращает глобальные свойства для всего процесса виртуальной машины.

 

Важно отметить, что при показанной реализации (через использование статических полей), создаётся один эеземпляр на один загрузчик классов!, если у вас несколько независымых загрузчиков классов, как например, в случае с несколькими web приложениями задеплоенными под разными web context’ами, будет создано по одному экземпляру для КАЖДОГО контекста. Если необходим строго один эземпляр в такой конфигурации, то следует использовать, например, JNDI контексты, поддерживаемые серверами приложений, которые позволяют гарантировать один эеземпляр не только для одного приложения но и для распределённого (например кластеризованного) приложения.