예제 #1
0
        /// <summary>
        /// The start point of our application
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            #region ClassicExample
            // get the instances
            var singletonClassic1 = SingletonClassic.GetInstance;
            var singletonClassic2 = SingletonClassic.GetInstance;

            // Test for same instance
            if (singletonClassic1 == singletonClassic2)
            {
                Console.WriteLine("Classic Objects are the same instance");
            }
            #endregion

            #region LazyInitialization
            // get the instances
            var singletonLazy1 = SingletonLazyInitialization.GetInstance();
            var singletonLazy2 = SingletonLazyInitialization.GetInstance();

            // Test for same instance
            if (singletonLazy1 == singletonLazy2)
            {
                Console.WriteLine("Lazy Objects are the same instance");
            }
            #endregion

            #region LazyInitialization
            // get the instances
            var singletonThreadSafe1 = SingletonThreadSafeLazyInitialization.GetInstance();
            var singletonThreadSafe2 = SingletonThreadSafeLazyInitialization.GetInstance();

            // Test for same instance
            if (singletonThreadSafe1 == singletonThreadSafe2)
            {
                Console.WriteLine("Thread-Safe Objects are the same instance");
            }
            #endregion

            #region RealWorldExample
            var balancer1 = LoadBalancer.GetLoadBalancer();
            var balancer2 = LoadBalancer.GetLoadBalancer();
            var balancer3 = LoadBalancer.GetLoadBalancer();
            var balancer4 = LoadBalancer.GetLoadBalancer();

            // Test for same instance
            if (balancer1 == balancer2 && balancer2 == balancer3 && balancer3 == balancer4)
            {
                Console.WriteLine("Same load balancer instance");
            }

            // Load balance 15 requests for a server
            var balancer = LoadBalancer.GetLoadBalancer();
            for (int i = 0; i < 15; i++)
            {
                string serverName = balancer.NextServer.Name;
                Console.WriteLine("Dispatch request to: " + serverName);
            }
            #endregion
        }
 /// <summary>
 /// Get the instance. Thread safe :D
 /// </summary>
 public static SingletonThreadSafeLazyInitialization GetInstance()
 {
     lock (_classLock)
     {
         if (_instance == null)
         {
             _instance = new SingletonThreadSafeLazyInitialization();
         }
         return(_instance);
     }
 }