2016-12-09 1 views
0

나는 싱글 톤이 매우 악하며 전염병처럼 피해야한다는 것을 알려주는 this SO article을 읽었습니다. 또한 싱글 톤은 "글로벌"과 같습니다.프로그램 상태에 싱글 톤을 사용해야합니까?

이것은 내가 정말로 프로그램 런타임 상태처럼 행동하는 무언가를 필요로하는지 궁금하게 만듭니다. 싱글 톤은 나쁜 생각일까요?

예를 들어 많은 창을 생성 할 수있는 JavaFX 응용 프로그램이 있습니다. 각각의 윈도우는 레이아웃 조정 (정렬 등)과 테마 지정을위한 스타일 시트가 적어도 두 개 있습니다.

테마 스타일 시트는 런타임에 다른 테마 스타일 시트로 전환 할 수 있으며 해당 인스턴스에서 열려있는 모든 창에 전역 적으로 영향을 주어야합니다. 나에게있어, ObservableList 개의 스타일 시트가있는 싱글 톤 클래스를 만드는 것이 합리적이다. 모든 윈도우는 Scene의 스타일 시트 속성을 바인드 할 수있다.

은 정말입니까? 테스트에 영향을 미치는 경우 정확히은 테스트에 부정적인 영향을 미칩니 까? 나는 각각의 윈도우가 서로 독립적으로 테스트되어야한다는 것을 이해하지만, 실제 동작은 모두 이라고 가정하고 같은 주제로 보려고이라고 가정합니다. 또한, 나는 그것이 각각의 윈도우가 실제로 서로 독립적이어야하는 다른 영역들에 영향을 미치지 않을 것이라고 생각한다.

정말 나쁜 경우 위의 예에서 같은 결과를 얻으려면 어떻게해야합니까?

+0

통해 읽기 - http://stackoverflow.com/a/86674/1759128 – ItachiUchiha

답변

4

실제로는 의존성 주입을 사용하여 동일한 동작을 얻을 수 있습니다.

응용 프로그램의 메인 라인에서 UIContext과 같은 클래스를 인스턴스화하고 새 윈도우를 열 때마다 UIContext 인스턴스를 해당 생성자에 제공합니다.

모든 창은 동일한 UIContext 인스턴스를 공유하지만 싱글 톤이 아니며 다른 많은 종속 클래스에 전체 UIContext을 삽입 한 것입니다.

즉, 테스트를 구현해야한다면 번거 로움없이 Windows에 샘플/위조품 UIContext을 줄 수 있습니다.

관련 문제