首页 > 其他 > 详细

C# 中的Singleton模式

时间:2014-07-06 22:12:44      阅读:417      评论:0      收藏:0      [点我收藏+]

一般写Singleton基本都是一下这个套路

class Singleton 
{
	public static Singleton  instance;

	private Singleton()
	{
	
	}

	public static Singleton Getinstance()
	{
		if(instatnce == null)
		{
			instance = new Singleton();
		}

		return instance;
	}
}

但是今天学到一个C#独有的Singleton写法:

class sealed Singleton 
{
	public static readonly Singleton  instance = new Singleton();

	private Singleton()
	{

	}
}

这种写法简单实用,大大减少了代码量。

但是缺点就是无法被继承,并且启动时就被初始化,无法延迟初始化。

 

我以这种写法,写了一个简单的LoadBalance类。

public sealed class LoadBalancer
{
    public static readonly LoadBalancer balancer = new LoadBalancer();
    private ArrayList servers = new ArrayList();
    private Random random = new Random();

    protected LoadBalancer() 
    {
        servers.Add("SERVER I");
        servers.Add("SERVER II");
        servers.Add("SERVER III");
        servers.Add("SERVER IV");
        servers.Add("SERVER V");
    }

    public string Server 
    {
        get 
        {
            int i = random.Next(servers.Count);
            return servers[i].ToString();
        }
    }
}

class Program
{
    static void Main(string[] args)
    {
        LoadBalancer b1 = LoadBalancer.balancer;
        LoadBalancer b2 = LoadBalancer.balancer;
        LoadBalancer b3 = LoadBalancer.balancer;
        LoadBalancer b4 = LoadBalancer.balancer;

        if (b1 == b2 || b2 == b3 || b3 == b4)
            Console.WriteLine("Same instance");
        Console.WriteLine(b1.Server);
        Console.WriteLine(b2.Server);
        Console.WriteLine(b3.Server);
        Console.WriteLine(b4.Server);

        Console.ReadLine();
    }
}

调用的结果是:

 

Same instance

SERVER III

SERVER I

SERVER IV

SERVER IV

 

C# 中的Singleton模式,布布扣,bubuko.com

C# 中的Singleton模式

原文:http://www.cnblogs.com/nonkicat/p/3824503.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!