Зачем нужен Singleton?

Решаю сейчас большую задачу 27 уровня. Там нас просят создать класс StatisticManager и сделать его синглтоном. Ок без проблем! В дальнейшем, в других классах программы мне приходится вызывать методы StatistcManager'а, и тут я начинаю сталкиваться с небольшими раздражающими моментами, приходится писать ссылочную переменную
StatisticManager statisticManager = StatisticManager.getInstance();
statisticManager.method();

или так:
StatisticManager.getInstance().method();

Это же столько лишних букв! Намного проще было бы сделать класс статическим и писать так:
StatisticManager.method();

Думаю, наверно синглтон в чем то выигрывает перед статическим классом? Читаю статью на Хабре и только усиливаю свои сомнения. Синглтон как минимум в данной задаче — избыточен.
Пока для себя вижу только одно применение синглтона — если нам нужно сэкономить ресурсы и создать объект не сразу, а когда — нибудь потом, когда он нам понадобиться. В остальных случаях статический класс — самое оно.
На хабре еще что-то пишут про наследование, но слабо пока могу себе представить такую ситуацию, наверно тоже не очень часто.
Если я не прав, поправьте меня, пожалуйста. Просто хочу лучше понять принципы проектирования и возможно это поможет разобраться кому то еще :)
  • ,

Singleton.

Добрый день.
Почитал (здесь: Шаблон проектирования Singleton) про шаблон Singleton и про его различные варианты реализации.
Всё понятно, но есть маленький вопрос:

public class EagerInitializedSingleton {
   
  private static final EagerInitializedSingleton instance = new EagerInitializedSingleton();
   
  // конструктор private, чтобы не было возможности создать экземпляр класса извне.
  private EagerInitializedSingleton(){}
 
  public static EagerInitializedSingleton getInstance(){
    return instance;
  }
}


В качестве недостатка этого варианта указывается потеря ленивой инициализации (Объект instance будет создан classloader-ом во время инициализации класса). И вроде всё ясно и понятно, но… Все классы загружаются в JVM динамически, при первом использовании класса. И я никак не могу в силу неопытности придумать пример, когда вызов метода getInstance() будет являться не первым использованием класса, который представлен выше в коде. Приведите, пожалуйста, практичекий пример, если не сложно.
  • ,

level20.lesson04.task03


/* Как сериализовать Singleton?
Два десериализованных объекта singleton и singleton1 имеют разные ссылки в памяти, а должны иметь одинаковые.
В класс Singleton добавьте один метод (погуглите), чтобы после десериализации ссылки на объекты были равны.
Метод main не участвует в тестировании.
*/


Можно не гуглить в переводах есть статья на эту тему.
  • ,

Что Вас ждет на 37-м уровне?

Многие из Вас уже знакомы с некоторыми паттернами проектирования (если не знакомы, то скоро познакомитесь), однако именно на 37 уровне Ваши любимые учителя интересно, детально и более подробно расскажут Вам о них. Речь будет идти о наиболее популярных: Singleton, Factory, AbstractFactory, Observer, Wrapper, Adapter, Proxy, Bridge и т.д.

Кроме того, 37-й уровень познакомит Вас с интересными особенностями уже известных Вам понятий, которые связаны с итераторами, коллекциями и другими фундаментальными основами.

P.S. Вы осознаете, что знали далеко не все о Map, Arrays и коллекциях в целом: javarush.ru/ =)

Разница в Java между паттерном синглтон и статическими классами.

Эта статья, о сравнении паттерна синглтон со статическим классом (такой класс, в котором все методы — статические) поднимает интересные вопросы, пропущенные автором в записи блога «Вопросы для интервью о паттерне синглтон в Java». Так как оба, и паттерн синглтон, и статический класс обеспечивают хороший доступ, а также имеют общие черты, например оба могут быть использованы без создания объекта и оба создают только один экземпляр. Это очень похоже на то, будто они оба предназначены для решения одной и той же задачи. Из-за высокого уровня сходства, интервьюеры обычно задают вопрос «Почему вы чаще используете паттерн синглтон вместо статических методов?» или «Вы можете заменить паттерн синглтон статическим классом, и какая вообще между ними разница?» Для ответа на данный вопрос, важно помнить фундаментальные различия между этими двумя подходами, первый дает нам Объект, для которого позже просто предоставляет статичные методы. Так как объект всегда емче метода, это может помочь вам разобраться, когда использовать паттерн синглтон, а когда статические методы.