• C# 中的Singleton模式


    一般写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

  • 相关阅读:
    jquery swipper插件的一些弊端
    linux ffmpeg 源码安装教程
    二叉树遍历(宽度优先)入门
    node安装教程
    Check the string CodeForces
    Minimize the error CodeForces
    sourcestress 问题解决方案
    C++ substr
    Java 读取Excel文件
    Stall Reservations
  • 原文地址:https://www.cnblogs.com/nonkicat/p/3824503.html
Copyright © 2020-2023  润新知