单例模式学习

           单例模式:顾名思义 就是这个类只能存在一个实例,

           其特点: 1.单例类只能有一个实例,

                        2.单例类必须自己创建自己的唯一实例,

                        3.单例类必须给所有其他对象提供这一实例。

 代码:定义 LoadBalancer 类为单例类

class LoadBalancer
    {
        private static LoadBalancer Balancer;
        private ArrayList array_listserver = new ArrayList();
        private Random random = new Random();

        protected LoadBalancer()
        {
            array_listserver.Add("服务器1");
            array_listserver.Add("服务器2");
            array_listserver.Add("服务器3");
            array_listserver.Add("服务器4");
        }

        public static LoadBalancer GetLoadBalancer()
        {
            if (Balancer == null)
            {
                Mutex mutex = new Mutex();
                mutex.WaitOne();
                Balancer = new LoadBalancer();
                mutex.Close();

            }
            return Balancer;
        }
        public string Server
        {
            get
            {
                int r = random.Next(array_listserver.Count);
                return array_listserver[r].ToString();
            }
        }
    }

 主函数:

static void Main(string[] args)
        {
            //单例模式
            #region 
            LoadBalancer b1 = LoadBalancer.GetLoadBalancer();
            LoadBalancer b2 = LoadBalancer.GetLoadBalancer();
            LoadBalancer b3 = LoadBalancer.GetLoadBalancer();
            LoadBalancer b4 = LoadBalancer.GetLoadBalancer();

            if ((b1 == b2) && (b2 == b3) && (b3 == b4))
            {
                Console.WriteLine("同步运行相同的实例对象");
                Console.WriteLine(b1.Server);
                Console.WriteLine(b2.Server);
                Console.WriteLine(b3.Server);
                Console.WriteLine(b4.Server);

            }
            #endregion
        }

 运行效果:

           

    说明每次声明的单例类都是相同的。

 

posted @ 2012-12-28 17:05  Mountains  阅读(150)  评论(0编辑  收藏  举报