독점은 악마이며 읽기 불가능 / 변경 불가능한 상태의 싱글 톤은 '실제'문제입니다 ...
싱글 톤이 병리학적인 거짓말 쟁이 임을 읽은 후 , Jason의 답변 에서 제안한대로 싱글 톤이 종종 오용 되는 방법에 대한 최상의 예를 제공하는이 작은 음식을 발견했습니다 .
다음과 같은 이유로 글로벌이 나쁩니다.
- ㅏ. 네임 스페이스 충돌이 발생합니다
- 비. 부주의 한 방식으로 국가를 폭로합니다
싱글 톤에 관해서
- ㅏ. 명시적인 OO 방식으로 호출하면 충돌이 방지되므로 a를 가리 킵니다. 문제가 아니다
- 비. 상태가없는 싱글 톤 (공장과 같은)은 문제가되지 않습니다. 상태가있는 싱글 톤은 다시 두 가지 범주에 속할 수 있는데,이 범주는 변경 불가능하거나 한 번 쓰고 많은 구성 (속성 파일)을 읽습니다. 이것들은 나쁘지 않습니다. 참조 홀더의 일종 인 가변 싱글 톤 (Mutable Singleton)이 당신이 말하는 것입니다.
마지막 진술에서 그는 블로그의 '싱글 톤은 거짓말 쟁이이다'라는 개념을 언급하고있다.
이것이 독점에 어떻게 적용됩니까?
독점 게임을 시작하려면 먼저 :
- 모든 사람들이 같은 페이지에 있도록 규칙을 먼저 설정합니다
- 게임이 시작될 때 모두에게 동등한 시작이 주어집니다
- 혼란을 피하기 위해 하나의 규칙 세트 만 제공됩니다.
- 게임 내내 규칙을 변경할 수 없습니다
자,하지 않은 사람을 위해 정말 독점을했다,이 표준은 최상의 이상적입니다. 독점에 대한 패배는 삼키기가 어렵습니다. 독점은 돈에 관한 것입니다. 당신이 잃어 버리면 나머지 플레이어가 게임을 끝내는 것을 힘들게 지켜봐야하며, 손실은 대개 신속하고 파쇄됩니다. 따라서 규칙은 일반적으로 특정 시점에서 다른 플레이어를 희생하여 일부 플레이어의 자기 이익을 제공하기 위해 왜곡됩니다.
친구 밥, 조, 에드와 독점을하고 있습니다. 빠르게 제국을 건설하고 지수 비율로 시장 점유율을 소비하고 있습니다. 상대방이 약해지고 혈액 냄새가 나기 시작합니다 (그림 참조). 버디 밥은 가능한 한 많은 가치가 낮은 부동산을 그리드 락에 넣었지만, 예상대로 높은 투자 수익을 얻지 못했습니다. 불운의 일격으로 밥은 보드 워크에 착륙하여 게임에서 제외됩니다.
이제 게임은 친절한 주사위 굴림에서 진지한 사업으로 진행됩니다. 밥은 실패의 모범이되었으며 조와 에드는 '그 사람'처럼되기를 원하지 않습니다. 따라서, 당신은 최고의 선수가되어 갑자기 적이됩니다. Joe와 Ed는 테이블 밖에서 거래, 뒤에서 돈을 주입, 저평가 된 주택 스와핑 및 일반적으로 그들 중 하나가 정상에 올 때까지 당신을 약화시키는 것을 연습하기 시작합니다.
그런 다음 그중 하나가 승리하는 대신 프로세스가 완전히 시작됩니다. 갑자기 유한 한 규칙이 움직이는 목표가되고 게임은 생존자 이후 모든 높은 등급의 현실 TV 쇼의 기초를 구성하는 사회적 상호 작용의 유형으로 변질됩니다. 왜, 규칙이 바뀌고 있으며 어떻게 / 왜 / 어떻게 대표해야하는지에 대한 합의가 없기 때문에 더 중요한 것은 결정을 내릴 사람이 없다는 것입니다. 그 시점에서 게임의 모든 플레이어는 자신의 규칙을 만들고 있으며, 두 명의 플레이어가 너무 피곤하여 차드를 유지하고 천천히 포기할 때까지 혼란을 겪습니다.
따라서 게임의 룰북이 싱글 톤을 정확하게 나타내면 독점 룰북이 남용의 예가됩니다.
이것이 프로그래밍에 어떻게 적용됩니까?
변경 가능한 싱글 톤에서 발생하는 명백한 스레드 안전성 및 동기화 문제를 제외하고 ... 데이터 세트가 하나 인 경우 여러 다른 소스에서 동시에 읽거나 조작 할 수 있으며 애플리케이션 실행 수명 동안 존재합니다. 아마도 물러서서 "여기에 올바른 유형의 데이터 구조를 사용하고 있습니까?"라고 물을 때가 좋습니다.
개인적으로, 나는 프로그래머가 응용 프로그램 내에서 일종의 꼬인 크로스 스레드 데이터베이스 저장소로 사용하여 싱글 톤을 남용하는 것을 보았습니다. 코드를 직접 연구 한 결과, 느리게 (스레드 안전에 필요한 모든 스레드 잠금으로 인해) 느리게 작동하고 악의적 인 작업 (예측할 수없는 / 간헐적 인 동기화 버그 때문에)을 증명할 수 있습니다. '생산'조건에서 테스트하기가 거의 불가능합니다. 물론 성능 문제 중 일부를 극복하기 위해 폴링 / 시그널링을 사용하여 시스템을 개발할 수 있었지만 테스트와 관련된 문제를 해결하지 못하고 왜 '실제'데이터베이스가 훨씬 더 강력한 기능으로 동일한 기능을 이미 수행 할 수 있는지 고민하는 이유 / 확장 가능한 방식.
싱글 톤은 싱글 톤이 제공하는 것이 필요한 경우 에만 옵션입니다. 개체의 1 회 읽기 전용 인스턴스입니다. 동일한 규칙이 객체의 속성 / 멤버에도 연결되어야합니다.