디자인 모드 - 1.4 단일 모드

13036 단어 디자인 모드
단일 모드: 하나의 클래스 는 하나의 인 스 턴 스 만 생 성 할 수 있 고 전체 방문 점 을 제공 합 니 다.
 1         private static Singleton instance;

 2 

 3         /// <summary>

 4         ///       ,    new    ,

 5         /// </summary>

 6         private Singleton()

 7         { 

 8         }

 9 

10         /// <summary>

11         ///               

12         /// </summary>

13         /// <returns></returns>

14         public static Singleton getInstance()

15         {

16             if (instance == null)

17             {

18                 instance = new Singleton();

19             }

20             return instance;

21         }

22     }

주의사항:
다 중 스 레 드 시의 단일 예: 여러 스 레 드 가 동시에 접근 할 때 여러 개의 단일 예 를 가 져 올 수 있 습 니 다.
1. 게으름뱅이
방법 1: lock 자물쇠
 1 class Singleton

 2     {

 3         private static Singleton instance;

 4         //                  

 5         private static readonly Object syncRoot = new Object();

 6 

 7         /// <summary>

 8         ///       ,    new    ,

 9         /// </summary>

10         private Singleton()

11         { 

12         }

13 

14         /// <summary>

15         ///               

16         /// </summary>

17         /// <returns></returns>

18         public static Singleton getInstance()

19         {

20             lock (syncRoot)//       instance,                 

21             {

22                 if (instance == null)

23                 {

24                     instance = new Singleton();

25                 }

26             }

27             return instance;

28         }

29     }

방법 2: 이중 잠 금 (double - check locking).방법 은 들 어 올 때마다 자 물 쇠 를 채 워 야 하기 때문에 프로그램의 효율 이 떨어진다.
 1     class Singleton

 2     {

 3         private static Singleton instance;

 4         //                  

 5         private static readonly Object syncRoot = new Object();

 6 

 7         /// <summary>

 8         ///       ,    new    ,

 9         /// </summary>

10         private Singleton()

11         { 

12         }

13 

14         /// <summary>

15         ///               

16         /// </summary>

17         /// <returns></returns>

18         public static Singleton getInstance()

19         {

20             //           

21             if (instance == null)

22             {

23                 lock (syncRoot)//       instance,                  

24                 {

25                     if (instance == null)//        instance  ,      ,               

26                     {

27                         instance = new Singleton();

28                     }

29                 }

30             }

31             return instance;

32         }

33     }

2. 굶 주 린 한식 단일 예 류: 불 러 올 때 자신 을 예화 합 니 다.
 1     //

 2     public sealed class Singleton

 3     {

 4 

 5         private static readonly Singleton instance = new Singleton();

 6         private Singleton()

 7         { 

 8         

 9         }

10         public static Singleton getInstance()

11         {

12             return instance;

13         }

14     }

좋은 웹페이지 즐겨찾기