그래서 저는 OO Design에서 새로운 것이므로 Singleton 디자인 패턴의 사용에 대해 궁금합니다. 내가 why singletons are bad에 대한 기사를 읽었지만, 내가 필요로 할 수 있는지 알 수 없다. 가능한 한 많이 피하고 싶습니다.하드웨어 관리를 위해 싱글 톤을 사용해야합니까?
필자의 경우 OceanOptics Spectrometer를 사용하여 C++에서 API를 통해 제어하고 참조 할 수 있습니다.
나는 단일 클래스 SpectrometerProxy
에서 분광기를 관리하는 모든 코드 (발견, 매개 변수 설정 또는 가져 오기, 데이터 검색)를 넣었습니다.
그리고이 클래스가 싱글 톤인지 여부를 알고 싶습니다. 나는 그것을 정당화 할 수있는 몇 가지 이유가있을 수 있다고 생각 :
는이 하드웨어를 관리 분광계의 수, 그들은이 모든 클래스
를 통해 제어 및 상담을하고 무엇이든
정확한 순서로 한 번만 수행해야하는 특정 절차가 있습니다 (분광계 열기, 일부 변수 확인 및 프로그램 중지시 분광계 닫기)
그렇다면이 클래스를 구현하는 것이 더 좋은 방법이 있을지 모르겠다. 내가 생각한 다른 솔루션은 일반 클래스로 유지하지만 (복사 생성자 및 할당 연산자를 선언하여) 복사를 방지하고 필요로하는 클래스에 대한 포인터를 전달하는 것입니다. 다중의 생성을 막지는 못합니다. SpectrometerProxy
그리고 ' d는 그것을 피하고 싶다.
나는 또한 모두 정적이라고 생각했지만 올바른 순서로 정확한 정적 멤버 함수를 호출하기 위해 클라이언트 코드에 의존하고 (따라서 분광계에 대한 연결을 올바르게 닫는 것을 잊지 않고) 따라서 오류가 발생하기 쉽고 RAII 원칙에 위배됩니다.
따라서이 문제에 대한 싱글 튼이 올바른 설계 접근 방법 일 수 있습니까? 아니면이를 제외하고 다른 방법을 찾아야합니까?
짧은 대답 : "아니오". 더 긴 대답 : "왜 그랬니?" – jalf
나는 내가해서는 안된다는 것을 안다. 나는 왜 싱글 톤이 나쁜지에 대해 읽었다. "왜 그랬니?" 꽤 제 질문입니다. 다른 부분은 "가능한 대안은 무엇입니까?"입니다. 감사. – JBL
오늘 여러분은 단일 프록시를 통해 모든 분광기를 제어하려고한다고 생각합니다. 내일은 둘 이상의 독립적 인 프록시가 필요할 수 있습니다. 하드 코드 된 가정만으로는 더 어려울 것입니다. –