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 контексты, поддерживаемые серверами приложений, которые позволяют гарантировать один эеземпляр не только для одного приложения но и для распределённого (например кластеризованного) приложения.