Монополія - це диявол, а одиночні особи з нечитаним / незмінним станом є "справжньою" проблемою ...
Прочитавши Синглтони - патологічні брехуни, як це запропоновано у відповіді Джейсона, я натрапив на цей маленький примх, який дає найкращий представлений приклад того, як одинаків часто зловживають.
Глобальний - це погано, оскільки:
- а. Це викликає конфлікт у просторі імен
- б. Це викриває державу необґрунтовано
Якщо мова йде про Сінглтон
- а. Явний вихідний спосіб викликати їх, запобігає конфліктам, тому вкажіть a. це не проблема
- б. Однотонні без штату є (як фабрики) - це не проблема. Синглтони зі станом можуть знову потрапляти у дві категорії, ті, які є незмінними або записуються один раз і читаються багато (файли конфігурацій / властивостей). Це непогано. Змінні одинарники, які є власниками довідок, - це ті, про які ви говорите.
В останньому твердженні він посилається на концепцію блогу "одинаки - брехуни".
Як це стосується монополії?
Щоб розпочати гру монополії, спочатку:
- ми спочатку встановлюємо правила, щоб усі були на одній сторінці
- всім дається рівний старт на початку гри
- подано лише один набір правил, щоб уникнути плутанини
- правила заборонено змінювати протягом усієї гри
Тепер для тих, хто насправді не грав монополію, ці стандарти ідеальні в кращому випадку. Поразку в монополії важко проковтнути, тому що монополія - це гроші, якщо ви програєте, вам потрібно старанно спостерігати за рештою гравців, які закінчують гру, а втрати, як правило, стрімкі та грізні. Отже, правила, як правило, вивертаються в якийсь момент, щоб слугувати інтересам одних гравців за рахунок інших.
Отже, ви граєте в монополію з друзями Бобом, Джо та Едом. Ви швидко будуєте свою імперію і споживаєте частку ринку з експоненціальною швидкістю. Ваші опоненти слабшають, і ви починаєте пахнути кров’ю (образно). Ваш приятель Боб вклав усі свої гроші на блокування мереж якнайбільше властивостей малої вартості, але він не отримує високої віддачі від інвестицій так, як він очікував. Боб, як удача від удачі, приземляється на ваш Boardwalk і вирізаний з гри.
Тепер гра переходить від доброзичливого кочення до серйозного бізнесу. Боб був прикладом невдачі, і Джо і Ед не хочуть закінчуватися як "той хлопець". Отже, ставши провідним гравцем, ви раптом стаєте ворогом. Джо і Ед починають займатися за столом, за грошовими введеннями грошей, недооціненою заміною будинків і взагалі будь-чим, щоб послабити вас як гравця, поки один з них не підніметься на вершину.
Тоді, замість того, щоб один з них виграв, процес починається все спочатку. Раптом, кінцевий набір правил стає рухомою ціллю, і гра перероджується у тип соціальних взаємодій, який би став основою кожного рейтингового реаліті-шоу з високим рейтингом після Survivor. Чому, тому що правила змінюються і немає єдиної думки щодо того, як / чому / що вони повинні представляти, і що ще важливіше, ніхто не приймає рішення. У цей момент кожен гравець в грі створює свої власні правила і настає хаос, поки двоє з гравців не надто втомилися, щоб не відставати від шараду і повільно здаватися.
Отже, якби правило з гри в точній формі представляло синглтон, правилом монополії був би приклад зловживань.
Як це стосується програмування?
Окрім усіх очевидних проблем безпеки та синхронізації, що існують із змінними синглтонами ... Якщо у вас є один набір даних, який може читатись / маніпулювати кількома різними джерелами одночасно та існує протягом життя програми, це, мабуть, вдалий час відступити і запитати «чи я тут використовую правильний тип структури даних».
Особисто я бачив, як програміст зловживає синглом, використовуючи його як якесь скручене сховище баз даних між програмами. Попрацювавши над кодом безпосередньо, я можу засвідчити, що це було повільним (через всі замки потоку, необхідними для забезпечення його потокової безпеки) і кошмаром для роботи (через непередбачуваний / переривчастий характер помилок синхронізації), і майже неможливо перевірити в умовах "виробництва". Звичайно, система могла бути розроблена за допомогою опитування / сигналізації для подолання деяких проблем продуктивності, але це не вирішило б проблеми з тестуванням, і чому б не турбуватися, коли «справжня» база даних вже може виконати таку ж функціональність у набагато більш надійній / масштабований спосіб.
Сінглтон - це лише варіант, якщо вам потрібно те, що надає синглтон. Екземпляр об'єкта лише для читання. Це ж правило має також каскадувати до властивостей / членів об'єкта.