Поганий приклад ІМХО. У реальних порталах - буває купа з'єднань до різних БД. Та й загалом то Сінглтон дійсно те ж саме що статики - єдине, погано виходить якщо раптом початківець прогерія починає статики-клас інстанціювати, і пхати туди не-статики властивості / методи: але так можуть тільки бегиннера робити. А якщо пару статики методів з'являться в Сінглтон руками того-ж бегиннера - нічого страшного не буде. - Гончаров Олександр 25 Серпня '16 о 17:01
Сінглтон - один з найлегших, але в той же час гранично значущих патернів проектування. Для чого він потрібен, вже була дана відповідь. Основна реалізація показана вами, а ось плюшки кожен може прикрутити свої. Так, наприклад, в C ++ можна створити окремий шаблонний клас Singleton методом template
відповідь дан 22 Березня '12 о 10:27
Справа в тому, що Сінглтон дозволяє створити тільки один свій екземпляр.
Відповідно всі класи, в яких використовується об'єкт Сінглтона, використовують один і той же об'єкт. З одними і тими ж даними.
Візьмемо приклад з відповіді товариша @knes про з'єднання з БД. Якщо з'єднання з БД занесено в конструктор Сінглтона, то все класи використовують БД через Сінглтон використовують один і той же з'єднання.
Те ж, якщо myClass - Сінглтон:
Все вищевикладене - лише найбільш зрозуміла на мій погляд ілюстрація механізму. Переваги та недоліки Сінглтона - інша історія.
відповідь дан 22 Березня '12 о 7:56
> Ще приклад: Додамо в Сінглтон довільну змінну. Потім додамо для неї geter і seter. Все просто. Фішка в тому, що ми можемо вказати значення цієї змінної в одному класі, а отримати в іншому БЕЗ передачі об'єкта Сінглтона між класами. У мене і без Сінглтона це працює. - exec 22 Березня '12 в 8:01
скопіюйте цей простий приклад, запустіть його, і вам буде зрозуміло, що статичний клас, разом з його статичними ж змінними не дубльований оператором new. Та хоч десять дублів наробіть - все одно - статичні змінні залишаться.
Хочете використовувати статичний клас для роботи з БД - заведіть всередині приватну статичну змінну DB_handler. Треба працювати з декількома з'єднаннями (кілька БД) - заведіть ще за потребою. Можна навіть спорудити щось статичного масиву. Чому ні? З'явиться необхідність занадто вивернутися - перепишіть клас. Тобто копії статичних класів взагалі не розрізняються (при виготовленні їх оператором new), поки в них не з'явиться хоча б одна нестатичних змінна. Правда, і після цього відрізнятися вони будуть тільки цієї нестатичних змінної. Правда, при цьому, керувати цією змінною вже вийде вже тільки з виготовленого класу.
Ось про це і було питання - "НАВІЩО?". Відповідь проста - так, нема чого :)
Напевно, є завдання, де треба заводити екземпляр класу Singleton, ". А от якщо не було звернень (ну не треба було щось), то нічого не заведеться і все буде тихо і спокійно. А ось ніби як статичний клас буде існувати навіть тоді , коли він може не знадобитися. і двох, як страшно з'їсть пам'яті. "Загалом, як-то я не можу ось так з ходу придумати такого завдання, щоб застосовувати саме СТВОРЕННЯ класів замість статичних класів.
І ось я наприклад, теж не бачу різниці між складним Singleton наворотом і простим Singleton :: doAction (). Взагалі, статичні класи (зі статичними змінними) чрезвийчано зручні ще й тим, що вони надають як би "глобальні" змінні для будь-якої області видимості. І Хендлер для БД тому яскравий приклад.
відповідь дан 22 Березня '12 о 14:52