C#のSingletonモード

1950 ワード

普通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