延迟实例做法,性能要求不高的程序代码:

代码
    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();
        }
    }

 急切创建实例

 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;
        }
    }
}

 


 

 

posted on 2011-01-25 10:44  jackdesk  阅读(166)  评论(0编辑  收藏  举报