Шаблоны проектирования не являются дизайном или разработкой методология . Это словарь : они помогают вводить имена в повторяющиеся шаблоны, встречающиеся в программных архитектурах. Исходя из моего опыта, разработка программного обеспечения для шаблонов FROM заканчивается сложным программным обеспечением с множеством одноцелевых классов, что увеличивает количество вещей, которые должен иметь в виду программист (а разработка программного обеспечения достаточно сложна, чтобы избежать заполнения вашего мозга шумом). ).
Однако шаблоны проектирования очень пригодятся на более позднем этапе. Всегда начинайте с конкретной проблемы и предметной области, пытайтесь найти решения и выявить закономерности в процессе. Не начинайте с шаблонов, пытаясь втиснуть в них вашу проблему. Знание наиболее распространенных шаблонов является обязательным, поскольку оно облегчает общение между программистами (будь то разработчики или пользователи библиотеки) и способствует распространению передового опыта.
Например, предположим, что ваша проблема связана с наборами данных. В какой-то момент вы создали свои структуры данных и алгоритмы. Теперь вам (или кому-то еще) необходимо получить доступ к своим данным на более высоком уровне. Это типичный случай, когда могут применяться шаблоны Iterator или Visitor. Так было сделано в C ++ STL, где все классы коллекции понимают итераторы. Однако вам не нужно заранее думать о шаблонах, которые вы можете или не можете применять здесь или там, всегда есть время для рефакторинга, как только шаблоны или потребности были выявлены.
Шаблоны проектирования изначально исходят из зданий и архитектуры, которые во многих отношениях очень похожи на разработку программного обеспечения. По моему опыту, лучший способ понять ДП - это аналогия с архитектурой: программное обеспечение - это здание, шаблоны - это способ организации архитектурных элементов: окна, двери, коридоры, лестницы, освещение ... Архитекторы не думают об элементах, которые они хочу использовать, но подумайте о том эффекте, который они хотят получить. Например, архитектор может подумать: эта лестница нуждается в свете. Чтобы достичь этого, он может использовать окна, окна в крыше, стеклянные блоки, искусственное освещение и т. Д., В соответствии с архитектурными ограничениями, строительными нормами, вкусом своего клиента и т. Д. Он не выбирает произвольно элементы, прежде чем думать о проблеме, которую пытается решить. решить, если он не пытается достичь эффекта или стиля. Более того, если на рынке появится другое решение (например, отражающие туннели солнечного света), он может включить его в доступные шаблоны проектирования для своих будущих проектов. OTOH, если он привык думать о решениях, прежде чем думать о проблемах, он рискует пропустить альтернативные решения, усложнить проблему или не решить ее вообще.
Здесь вы использовали шаблон Singleton для того, что выглядит как глобальный объект, требующий динамической инициализации. В этом случае синглтон является приемлемым решением. Однако иногда вам потребуются более сложные решения из-за внешних ограничений (например, вам нужно инициализировать объекты в определенном порядке), и Singleton больше не подходит. В противном случае объекту потребуется только статическая инициализация, а простая глобальная переменная будет соответствовать вашим потребностям.
Злоупотребление шаблонами проектирования так же плохо, как и не использовать их там, где они необходимы. Выбор того, использовать какой-либо шаблон или нет, зависит от знаний и опыта проектирования и разработки программного обеспечения в целом и вашей области в частности.