Чему научился:
Синглтон применяется в тех случаях, когда нужен только один экземпляр класса. Создается один раз и дальше классы обращаются только к этому экземпляру. Является одним из самых простых паттернов, тем не менее имеет разные подводные камни, если дело касается многопоточности, виртуальных машин и прочее.
Что было сложным:
пришлось повторить, что такое lazy initialization
Научился: Пока-что трудно сказать, только начал въезжать в синглтон Не использовал ни разу синглтон.
P.S. Прогуглил синглтон и картинки выдали такие результаты :D
Научился: Применять шаблон Singleton мне не приходилось. Как я понял из статей, Одиночку нужно применять (вместо статического класса) в случае, если необходимо обеспечить наличие объекта, вместе со всеми преимуществами ООП - наследование, инкапслуляция, полиморфизм. Singleton очень гибок в плане реализаций, но требует чуть больше памяти.
Если достаточно хранить в куче несколько статических методов, с меньшей необходимой памятью, то лучше выбрать стат. класс.