C#のSingletonモード
1950 ワード
普通Singletonと書くのは基本的にこのやり方です.
しかし、今日はC#独自のSingletonの書き方を学びました.
この書き方は簡単で実用的で,コード量を大幅に減らした.
しかし欠点は継承できず、起動時に初期化され、初期化を遅らせることができないことです.
私はこのような書き方で、簡単なLoadBalanceクラスを書きました.
呼び出しの結果は次のとおりです.
Same instance
SERVER III
SERVER I
SERVER IV
SERVER IV
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