일부 클래스에서 사용해야하는 큐가 있습니다.전역 변수에 싱글 톤을 사용하는 것보다 더 좋은 아이디어
모든 클래스에 대해 동일한 큐이므로 정적 멤버로 정적 클래스에 큐를 놓을 것입니다. 하지만 이건 좋지 않은 OOP가 아니라는 것을 이해합니다. (비록 싱글 톤이 디자인 패턴 중 하나라고 생각하지만) 그래서이 큐를 구현하기위한 아이디어가 필요합니다. 모든 클래스에 고유하고 액세스 가능해야합니다. 모든 클래스가 동일한 큐를 사용하기 때문입니다.
일부 클래스에서 사용해야하는 큐가 있습니다.전역 변수에 싱글 톤을 사용하는 것보다 더 좋은 아이디어
모든 클래스에 대해 동일한 큐이므로 정적 멤버로 정적 클래스에 큐를 놓을 것입니다. 하지만 이건 좋지 않은 OOP가 아니라는 것을 이해합니다. (비록 싱글 톤이 디자인 패턴 중 하나라고 생각하지만) 그래서이 큐를 구현하기위한 아이디어가 필요합니다. 모든 클래스에 고유하고 액세스 가능해야합니다. 모든 클래스가 동일한 큐를 사용하기 때문입니다.
여러분이 말한 것은 클래스가 일부 컨텍스트를 공유하며이 컨텍스트에는 하나의 큐가 포함되어 있다는 것입니다. 클래스가이 컨텍스트에 의존한다고 말할 수 있습니다.
싱글 톤 패턴이 좋지 않은 이유는 글로벌 (정적) 컨텍스트를 공통 컨텍스트로 사용하기 때문입니다. 이 두 가지 이유로 제한된다
분명 클래스의 종속성을 쉽게 식별 할 수없고, 따라서 (예 : 단위 테스트 환경으로) 서로 다른 환경에서 그들을 설정하는 것은 쉽지 않다.
이 컨텍스트의 두 인스턴스가 나란히 실행되도록하는 것은 완전히 불가능합니다.
따라서 간단한 해결책은 컨텍스트 클래스 내에 모든 클래스의 종속성을 넣은 다음 모든 클래스를이 클래스의 인스턴스와 연결하는 것입니다.
또 다른 고급 솔루션은 종속성 삽입 프레임 워크를 사용하는 것입니다.
DI 프레임 워크는 제안 된 솔루션보다 덜 복잡하다고 주장 할 것입니다. 확실한. 파악하는 새로운 개념이지만 깨끗한 코드를 생성합니다. – jgauffin
프로그램의 모든 클래스와 레이어에서 전역 적으로 볼 수 있으므로이 프로그램을 싱글 톤으로 만들지는 않겠습니다. 큐에 액세스해야하는 파트에 큐 자체에 대한 참조를 제공하십시오. 따라서 소프트웨어의 어느 부분에서 소프트웨어에 액세스 할 수 있는지 명확하게 결정할 수 있습니다.
나는 야생의 방식으로 소프트웨어의 어떤 부분에서 사용 되었기 때문에 "XyzManager"라고 불리는 너무 많은 싱글 톤을 가진 소프트웨어 프로젝트에서 매우 나쁜 경험을했습니다. 가능한 경우 전역 변수 및 싱글 톤을 피하십시오. 객체에 대한 참조가 액세스해야하는 객체에 대한 참조를 제공하는 것이 좋습니다.
IoC 컨테이너를 사용하고 있습니까? –
Queue (또는 ConcurrentQueue)가 포함 된 singletone 클래스를 만들고 클래스에 필요한 모든 기능을 노출합니다. – Maxim