延迟实例做法,性能要求不高的程序代码:
代码
public class myClass
{
private static myClass mycl;
private myClass(){}
public static myClass getInstance()
{
if (mycl==null)
{
mycl =new myClass();
}
return mycl;
}
public void writesingleton()
{
Console.WriteLine("我是单件模式");
}
}
class Program1
{
static void Main()
{
myClass mycl = myClass.getInstance();
mycl.writesingleton();
}
}
{
private static myClass mycl;
private myClass(){}
public static myClass getInstance()
{
if (mycl==null)
{
mycl =new myClass();
}
return mycl;
}
public void writesingleton()
{
Console.WriteLine("我是单件模式");
}
}
class Program1
{
static void Main()
{
myClass mycl = myClass.getInstance();
mycl.writesingleton();
}
}
急切创建实例
public class myClass
{
private static myClass mycl=new myClass();//
private myClass(){}
public static myClass getInstance()
{
return mycl;
}
public void writesingleton()
{
Console.WriteLine("我是单件模式");
}
}
class Program1
{
static void Main()
{
myClass mycl = myClass.getInstance();
mycl.writesingleton();
}
}
代码出自设计模式:
多线程情况下的单件模式代码,性能最好。该方法主要是减少了GetInstance()创建时间
using System;
using System.Configuration;
namespace HeadFirstDesignPatterns.Singleton.InterestRate
{
/// <summary>
/// Summary description for RateSingleton.
/// </summary>
public class RateSingleton
{
private volatile static RateSingleton uniqueInstance;//volatile防止多线程出现问题
private static object syncRoot = new Object();
private double currentRate =
Convert.ToDouble(ConfigurationSettings.AppSettings["CurrentInterestRate"]);
public double CurrentRate
{
get
{
return currentRate;
}
set
{
currentRate = value;
}
}
private RateSingleton()
{}
public static RateSingleton GetInstance()
{
//The approach below ensures that only one instance is created and only
//when the instance is needed. Also, the uniqueInstance variable is
//declared to be volatile to ensure that assignment to the instance variable
//completes before the instance variable can be accessed. Lastly,
//this approach uses a syncRoot instance to lock on, rather than
//locking on the type itself, to avoid deadlocks.
if(uniqueInstance == null)
{
lock (syncRoot)//只在类第一次初始化执行,使用lock主要是防止多线程情况发生
{
if(uniqueInstance == null)
{
uniqueInstance = new RateSingleton();
}
}
}
return uniqueInstance;
}
}
}
调用代码:
using System;
namespace HeadFirstDesignPatterns.Singleton.InterestRate
{
/// <summary>
/// Summary description for RateImplementation.
/// </summary>
public class RateImplementation
{
public RateImplementation()
{}
public double GetRate()
{
RateSingleton rate = RateSingleton.GetInstance();
return rate.CurrentRate;
}
}
}
using System;
namespace HeadFirstDesignPatterns.Singleton.InterestRate
{
/// <summary>
/// Summary description for RateImplementation.
/// </summary>
public class RateImplementation
{
public RateImplementation()
{}
public double GetRate()
{
RateSingleton rate = RateSingleton.GetInstance();
return rate.CurrentRate;
}
}
}
namespace HeadFirstDesignPatterns.Singleton.InterestRate
{
/// <summary>
/// Summary description for RateImplementation.
/// </summary>
public class RateImplementation
{
public RateImplementation()
{}
public double GetRate()
{
RateSingleton rate = RateSingleton.GetInstance();
return rate.CurrentRate;
}
}
}