1. 程式人生 > >設計模式------單體模式

設計模式------單體模式

        又叫單一例項模式,宗旨在於確保某個類只有唯一的一個例項,並且為該類提供一個全域性的訪問點。

        實現該模式的方法,主要有兩種:單執行緒的和多執行緒的。

        單執行緒

        程式碼如下:

        public class SingletonPattern {
                private static SingletonPattern single = null;  
               //防止直接產生一個的例項
               private SingletonPattern() {}
               public static SingletonPattern getInstance()

               {
                      if(null == single)

                      {
                              single = new SingletonPattern();
                      }
                      return single;
               }
       }

       外部在生成該類的物件時,由於single是靜態物件,通過呼叫getInstance()來獲取該類物件,如果single已經存在則直接返回,否則建立新物件。

      這樣,在單執行緒應用中,能夠保證SingletonPattern類的物件時唯一的。

      但是多執行緒中就不能保證。

        多執行緒

        程式碼如下:

        public class SingletonPattern {
                private static SingletonPattern single = null;  

                private static object synclock = new object();
               //防止直接產生一個的例項
               private SingletonPattern() {}
               public static SingletonPattern getInstance()

               {

                     lock(synclock)

                     {
                          if(null == single)

                          {
                                single = new SingletonPattern();
                          }

                      }
                      return single;
               }
       }

        在該方法中,多執行緒的情況也可以保證SingletonPattern物件的唯一性。

        注意:在某些情況下,這麼使用單一例項模式,不能達到單一例項的目的,比如跨伺服器的情況等。這些需要在實際情況中去靈活執行。

        另外,可以使用該模式,但是不要過度使用該模式。