单例模式解决的是一个类在一个进程中只有一个实例的问题,而原型模式解决的是当创建对象消耗的资源很多的时候,可以从内存中拷贝一份已经创建的对象,不用重复new的问题。
public class Singleton
{
/// <summary>
/// 构造函数耗时耗资源
/// </summary>
private Singleton()
{
Thread.Sleep(1000);
Console.WriteLine("{0}被构造一次", this.GetType().Name);
}
/// <summary>
/// 静态构造函数:由CLR保证,程序第一次使用这个类型前被调用,且只调用一次
/// </summary>
static Singleton()
{
_Singleton = new Singleton();
Console.WriteLine("Singleton 被启动");
}
/// <summary>
/// 原型模式:解决对象重复创建的问题
/// 通过MemberwiseClone来clone新对象,避免重复创建,所创建出来的对象和原有对象是独立的,若使用1000个线程调用do方法,最后total字段的值还是0
/// </summary>
/// <returns></returns>
public static Singleton CreateInstancePrototype()
{
Singleton singleton = (Singleton)_Singleton.MemberwiseClone();
return singleton;
}
public int total;
public void do(){
total++;
}
}