標籤:blog os 代碼 line div new
一般寫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