Я в основном ищу механизм кэширования для пользователей HelperWrapper. Правильно ли это использование двухместного синглета?Правильно ли это использование двухэлементной проверки?
final class HelperWrapper {
private static volatile Helper helper = null;
public static Helper getHelper() {
if (helper == null) {
synchronized (HelperWrapper.class) {
if (helper == null) {
helper = new Helper();
}
}
}
return helper;
}
}
Я знаю, что это не помешало бы кому-либо создавать свои собственные объекты Helper, но это не цель.
Дополнительная информация:
- Я не могу изменить класс Helper, чтобы конструктор приватным. Я тоже этого не хочу.
- требования диктуют, что помощник не должен быть охотно инстанцирован
Связанные записи: [Пункт 3 из эффективной Java] (http://www.informit.com/articles/article.aspx?p=1216151&seqNum=3) – JonK
Я не могу изменить исходный код Helper, поэтому я не могу сделать его конструктор частный. Я не пытаюсь помешать другим создавать экземпляр собственного помощника. – Ares
@VinceEmigh Двойная проверенная блокировка больше не нарушена, так как Java 5. – CKing