sington模式
//單線程下的sington模式
/*說明:單件模式一般不支持ICloneable接口,也不支持序列化;只考慮了創建管理,沒有考慮對象的銷燬管理 */
class singThreadsington
{
private static singThreadsington instance;
private singThreadsington()
{
}
public static singThreadsington Instance
{
get
{
if (instance == null)
instance = new singThreadsington();
return instance;
}
}
//多線程下的單件模式
class mutThreadSington
{
private static volatile mutThreadSington instance;//volatile強制代碼編譯指令順序不改變
private static object lockhelper = new object();
private mutThreadSington()
{
}
public static mutThreadSington Instance
{
get
{
if(instance== null)
{
lock (lockhelper) //鎖住代碼塊
{
if (instance == null)
instance = new mutThreadSington();
}
}
return instance;
}
}
}
//任意線程模式下都可以使用的單件模式
/*使用了靜態內聯初始化,
* public static readonly singtonAll instance = new singtonAll()
* 其實就是一個相當於
* public static readonly singtonAll instance;
* static singtonAll(){intace =new singtonAll()}
*/
class singtonAll
{
public static readonly singtonAll instance = new singtonAll();
private singtonAll() { }
}
//以上sington模式都不支持參數化,下面我們寫一個支持參數化的單線程下的sington模式
class singThredsingtonWithPara
{
private static singThredsingtonWithPara instance;
private singThredsingtonWithPara(int x, int y)
{
singThredsingtonWithPara.x = x;
singThredsingtonWithPara.y = y;
}
public static singThredsingtonWithPara getInstance(int x, int y)
{
if (instance == null)
instance = new singThredsingtonWithPara(x, y);
else
{
singThredsingtonWithPara.x = x;
singThredsingtonWithPara.y = y;
}
return instance;
}
static int x;//需要設置的參數
static int y;
}
static void Main(string[] args)
{
singThredsingtonWithPara s1 = singThredsingtonWithPara.getInstance(1, 2);
singThredsingtonWithPara s2 = singThredsingtonWithPara.getInstance(3,3);
//結果似乎s1和s2相同,x和y都是。
}
/*sington模式的使用:
* 對象池
*/
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.