//
单线程下的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
模式的使用:
*
对象池
*/
}