設計模式 單例模式

2022-08-20 22:33:12 字數 2126 閱讀 6888

單例模式,屬於建立型別的一種常用的設計模式。它的目的就是為了建立的類在當前程序中只有乙個例項

從定義可以看出,使用單例模式的目的無非就是下面兩個:

這種方式不是單例模式,但可以滿足需求,在正式生產中也會經常用到。

**

public static class singletonsample1  

}

注意:這裡的++_counter其實存在高併發問題,嚴格上應該用interlocked.increment(ref _counter)的方式,由於我們主要講的是單例模式並且簡單且能演示效果,所以故意忽略了這一點。下同

優點缺點這是最簡單的一種單例模式,也是比較常用的一種方式,可在正式生產中使用。

**

public sealed class singletonsample2  

public static singletonsample2 instance

}public int increasecount()

}

優點

缺點以上兩種方式都存在第一次載入時,資源浪費的問題,但在記憶體資源越來越便宜的今天,通常這種浪費是可以接受的,因此也不必過於糾結這種浪費。當然,在條件允許的情況下,能優化還是要優化的。

該方式是改進過程中的過渡階段,不可用於生產。

**

public class singletonsample3

public static singletonsample3 instance

return _instance;}}

public int increasecount()

}

優點

缺點該方式也是改進過程中的過渡階段,不可用於生產。

**

public class public class singletonsample4

public static singletonsample4 instance

return _instance;}}

}public int increasecount()

}

優點缺點

5. 單例模式四

著名的雙檢鎖模式,完美解決問題,可用於生產。

**

public class singletonsample5

public static singletonsample5 instance}}

return _instance;}}

public int increasecount()

}

優點缺點.net支援的一種優雅版本的實現方式,前面講了那麼多其實就是為了引出該方式,強烈建議使用該版本

**

public class singletonsample6

public static singletonsample6 instance

}public int increasecount()

}

優點

缺點泛型版本,是否使用視情況而定。

**

public class singletonsamplebasewhere tsingleton : class

public static tsingleton instance

}}public class singletonsample7 : singletonsamplebase

public int increasecount()

}

優點

缺點最後舉的乙個用單例模式實現sqlhelper的例子,重點是為了突出相對於靜態類,例項類在多型擴充套件方面的優勢,其實如果沒有類似這種擴充套件需求,靜態類就足以應付絕大多數的需求。

單例模式實現方式如此之多,但實際上大多數情況需要使用單例的時候都可以用靜態類實現,比如一些工具類,而其他場景直接用單例模式五或者單例模式六即可,著名的雙檢索其實也是大可不必的,畢竟跟單例模式五相比,體現不出任何優勢,還更容易出錯。

原始碼鏈結

設計模式 單例模式

單例模式 singleton pattern 是乙個比較簡單的模式,其定義如下 ensure a class has only one instance,and provide a golbal point of acess to it.確保某乙個類只有乙個例項,而且自行例項化並且向整個系統提供這個...

設計模式 單例模式

class testsingleton static public function instance return self testsingleton private function clone public function setsinvar sinvar public function ...

設計模式 單例模式

單例模式的目的是保證類在系統中只被例項化一次,由該唯一的例項來為系統提供服務.單例模式主要用於保證服務的統一,比如獲取統一的編號服務,模仿oracle的序列生成等.但單例的使用需要謹慎,特別是在需要作負載均衡的地方,因為這種程式級的單例模式實際上只能保證在乙個應用中為單例.如果被多個應用載入,還是會...