/**
* Самый обычный шаблон singleton для однопоточной системы с одним контекстом
*/
// Without lazy load
final class Singleton {
private static Singleton instance = new Instance();
private Singleton() {};
public static Singleton getInstance() {
return instance;
}
}
// With lazy load
final class Singleton {
private static Singleton instance;
private Singleton() {};
public static Singleton getInstance() {
if (null == instance) {
instance = new Instance();
}
return instance;
}
}
Возможны проблемы с шаблоном:
- несколько класслоадеров
- объект был сериализирован и десериализован
- не учитывается синхронизация во вногопоточном приложении
Если кто-то будет умничать, что такой синглетон не будет работать при сериализации, то он может идти лесом, поскольку без аннотации Serializable такой класс не сериализуется. Зато этот синглетон все же не будет работать, если в системе используется более чем один класслоадер.
|