2009-12-23 10 views
0

C#의 비 싱글 톤 클래스 내에 싱글 톤 클래스를 중첩시킬 수 있습니까? 그렇다면이 경우 싱글 톤의 수명주기에 대한 제한이 있습니까?중첩 된 싱글 톤 클래스

public class NonSingletonClass 
{ 
    public NonSingletonClass() 
    { 
    // Initialize some stuff. 
    } 

    // Put some methods here. 

    public class SingletonClass 
    { 
    // Singleton construction goes here. 

    // Put some methods here. 
    } 
} 

내 응용 프로그램의 디자인에서 이것은 의미가 있지만 실제로 이것을 구현하기 전에 잠재적 인 문제점을 알아야합니다.

EDIT : 특히 타이머를 기준으로 작업을 실행하는 작업 호스트가 있습니다. 이 경우 NonSingletonClass은 작업의 인스턴스입니다. SingletonClassNonSingletonClass에서 사용하는 데이터의 저장소이지만 NonSingletonClass 외부에서 수정할 수 있습니다. NonSingletonClass 인스턴스가 여러 개 있어도 모든 인스턴스에 대해 하나의 명령어 및 데이터 집합 만 남도록 보장하기 위해 SingletonClass이 있습니다.

답변

2

나는 당신이 monostate 패턴

이 링크이 잘 설명하고 monostate pattern

+0

우수 참조, 'SingletonClass' 내부의 변수 인스턴스가 여전히'NonSingletonClass'의 인스턴스화 외부에 존재합니까? –

+0

@ md5sum - 예 (15 문자) – JonH

4

예, 싱글은 비 내에서 완전히 편안하게 살 수있는 싱글 톤 패턴으로 contrats을 제공 찾고있는 생각 하나씩 일어나는 것.

중첩 클래스의 수명주기는 외부 클래스의 수명주기와 완전히 독립적입니다. C#에서는 중첩 클래스와 중첩되지 않은 클래스간에 차이가 거의 없습니다. 일부 차이점 - 중첩 클래스는 외부 클래스의 전용 멤버에 액세스 할 수 있으며 확장 메서드는 중첩되지 않은 정적 클래스에 있어야합니다 (예 :). 그러나 수명주기에는 영향을 미치지 않습니다.

특정 우려 사항이 있습니까?

+0

내 NonSingletonClass의 인스턴스에서 내 'SingletonClass'가 외부'NonSingletonClass'에서 발생하는 전화에 계속해서 반응하지 않으면 문제가 심각하게 생길 수 있습니다. –

+0

예, 별도의 수업 인 것처럼 완전히 독립적입니다. –

0

내 첫 번째 질문은 "내 응용 프로그램 디자인이 합리적입니다"라고 생각할 때 더 구체적인 내용을 제공 할 수 있다고 생각합니다. 추상 공장 및 빌더는 싱글 톤 클래스. NonSingletonClass 내에서 사용할 일종의 글로벌 데이터를 저장하고 있습니까?

0

나는 거기에 어떤 문제가 있다고 생각하지 않습니다. h 어느 클래스도 다른 클래스에 대한 참조를 보유하지 않는다는 것을 고려하여 중첩 된 싱글 톤. 싱글 톤이 여러 인스턴스에 대해 가변적 인 데이터 저장소를 제공한다고 가정하면, 잠재적 인 문제는 동시성과 관련이있을 것이라고 생각합니다.

이는 멀티 스레드 액세스가 허용되는 경우에만 적용됩니다. 즉, 먼저 단일 잠금이 항상 유효한 상태가되도록 적절한 잠금을 설정해야합니다. 둘째, 싱글 톤 상태가 변경되고 객체가 비 결정적 순서로 액세스하는 경우 결과를 예측할 수 없습니다 (즉 경쟁 조건).

동시성이 응용 프로그램에 문제가되지 않는다면 개인 구현 클래스를 사용하면 구현 세부 정보를 숨기고 각 객체에 하나의 역할 만 부여하는 훌륭한 방법이 될 수 있습니다.