2008-10-31 4 views
3

우리가 이런 걸 보이는 클래스가 싱글 공공 속성을 통해 액세스되는이 표준 구현이 : 지금싱글 데이터 액세스 레이어 직장에서 우리의 데이터 액세스 레이어에서

public static CustomerController Instance 
     { 
      get 
      { 
       lock(singletonLock) 
       { 
        if(_instance == null) 
        { 
         _instance = new CustomerController(); 
        } 
        return _instance; 
       } 
      } 
     } 

, 나는 코드가 무엇을 얻을 그런데 왜 클래스가 사용될 때마다 클래스의 인스턴스를 만드는 것 이상으로 이것을 할 것인지 궁금합니다.

답변

2

EDIT : Oh whoops "데이터 액세스 레이어"부분을 잡지 못했습니다. 그러나 멀티 스레드 응용 프로그램이 싱글 톤 클래스를 통해 데이터베이스 호출을 모두 퍼널하는 경우 경합 조건을 피하면서 한 스레드 만 데이터베이스에 즉시 액세스합니다.

멀티 스레드 응용 프로그램에서 로깅 메커니즘을 사용하여 모든 예외 사항을 기록하고 정보를 기록하는 경우 (특히 서비스 또는 항상 실행중인 응용 프로그램의 경우 물건이 발생할 때마다 상태를 인쇄) 파일 잠금 문제가 발생합니다. 싱글 톤 로거 클래스를 사용하기 때문에 하나의 스레드 만 로거에 액세스 할 수 있으며 나머지는 로거가 텍스트 파일에 줄을 쓸 때까지 기다립니다.

싱글 톤을 사용하는 데는 여러 가지 멋진 이유가 있지만, 멀티 스레드 응용 프로그램에서 파일 액세스로이 문제가 발생할 때까지 나는 당신과 같았고 그들이 무엇을했는지 전혀 몰랐습니다.

+0

이 경우에는 싱글 톤의 필요성을 이해할 수 있지만 데이터베이스에 액세스하는 경우 클래스의 싱글 톤 인스턴스를 가질 필요가 실제로 있습니까? – lomaxx

+0

데이터베이스가 앞으로 무엇입니까? 텍스트 파일에 쓰는 것에 대해 이야기하고 있는데,이 경우 한 번에 하나의 스레드 만 파일에 액세스 할 수 있습니다. – goldenratio

+0

오, 미안 해요, 당신이 싱글 톤이 무엇인지 묻고 있다고 생각했습니다. '데이터 액세스 레이어'부분이 클릭되지 않았습니다. 죄송합니다. – goldenratio

1

또한이 작업을 수행 할 수 있습니다, 그 이중 확인 잠금, 그것은 당신의 싱글

public static CustomerController Instance 
     { 
       get 
       { 
         if(_instance == null) 
         { 
          lock(singletonLock) 
          { 
           if(_instance == null) 
           { 
             _instance = new CustomerController(); 
           } 

          } 
         } 
         return _instance; 
       } 
     } 
1

대답에 대한 액세스 속도를 높일 것은 매우 간단합니다 : 당신이 같은 객체에게 그것의 때마다 싶어 익숙한.

클래스 개체가되는 장점을 가진 전역 변수 (즉, 유일한 변수)가되는 장점을 제공합니다 (다른 것들 중에서 가장 필요한 것은 눈에 보이지 않는 초기화를 할 수 있음).

+0

왜 전역 변수로 사용하는 것이 좋은 일입니까? 그게 싱글 톤 (singleton)을 가지기위한 단순한 것 같아요. – lomaxx

+0

때때로 싱글 톤 (singleton)을 갖는 것이 어떤 이점도 얻지 못합니다. 앱이 단일 스레드 인 경우에는 단일 스레드가 아니어도됩니다. 그러나 처음부터 싱글 톤으로 만들면 부정적인 영향을주지 않으며 앞으로 멀티 스레드로 만들면 리팩토링 할 필요가 없습니다. – goldenratio

+0

@lomaxx : 글로벌 변수로 사용하고 싶지는 않습니다. 첫째, 네임 스페이스 오염입니다. 둘째, 뭔가 초기화해야합니다. 싱글 톤은 이러한 문제를 해결합니다. – staticsan

관련 문제