单例模式

1.单例模式

它的特点是:

1.构造参数是私有的,可以防止其他类实例化它,即一个类只有一个实例

2.用一个静态变量来保存类的实例

3.提供一个全局访问点,使用一个公有的静态方法来实例化它

下面是一个支持多线程的单例模式代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace danlimoshi
{
    public class Danli
    {
        //私有的构造函数,它不可以在外边创建实例
        private Danli()
        { }
        private static Danli danli;
        private static object x=new object();//定义一个互斥信号量,保证多线程访问该静态实例的唯一性
        public static Danli GetDanli()//定义一个公共静态方法来获取对象实例
        {
            if (danli == null)//首先判断对象是否为空,如果不为空就不需要加锁了,节省时间
            {
                lock (x)//保证多线程访问该静态实例的唯一性
                {
                    if (danli == null)
                    {
                        danli = new Danli();
                    }

                }
            }
            return danli;
        }
        public void show()
        {
            Console.WriteLine("工作中!!!");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Danli danli = Danli.GetDanli();
            danli.show();
            Console.WriteLine("{0}",danli.GetHashCode());

            Danli danli2 = Danli.GetDanli();
            danli2.show();
            //哈希函数用于快速生成一个与对象的值相对应的数字(哈希代码)
            Console.WriteLine(danli2.GetHashCode());//两个对象的哈希函数一样,说明在内存中的地址一样,只有一个实例
           //比较两个对象是否相同
            Console.WriteLine(danli.Equals(danli2));
        }
    }
}
单例模式

 

posted @ 2015-04-15 21:22  runninglzw  阅读(143)  评论(0编辑  收藏  举报