设计模式之——单例模式

跳转到==>设计模式汇总

单例模式
1 单例模式有几种说法,懒汉模式,饿汉模式;线程安全和线程不安全。
    1.1 懒汉模式:是指等到调用单例方法GetInstance()的时候才去检查是否已生成对象,如果_instance为null则new一个对象,如果不为null,则直接返回_instance。这种方式的优点是你可能不会用到该实例,而只用到它的静态方法,那么这个时候内存就还没有new出来的对象,可以减少内存占用。缺点是如果多线程运行,可能会new出多个对象,属于线程不安全。
        private static Singleton _instance ;
    1.2 饿汉模式:是指不管你调没调用过这个类,系统在读取到该类的时候,就直接初始化new一个对象出来。缺点是没有lazy的好处(也就是懒汉模式的优点)。优点是简单,并且线程安全。
        private static Singleton _instance = new Singleton();
    1.3 线程安全:就是多个线程同时调用,该单例类不会产生出多个对象。可以有饿汉模式,也可以在GetInstance方法内外部加同步锁。
    1.4 线程不安全: 多个线程下,该单例类可能产生出多个对象,导致违背了单例的设计目标

    public class Singleton1
    {
        //private static Singleton1 instance ;    //懒汉模式
        private static Singleton1 instance = new Singleton1();  //饿汉模式

        public static Singleton1 Instance
        {
            private set { }
            get { return instance; }
        }

        private Singleton1() { }

        public static Singleton1 GetInstance()
        {
            if (instance == null)   //懒汉模式加这个判断
            {
                instance = new Singleton1();
            }
            return instance;
        }

        public void Method() { }
    }

另一种单例结构:

    public class Singleton<T> where T : new()
    {
        public static T Instance
        {
            get
            {
                if (Instance == null)
                {
                    Instance = new T();
                }
                return Instance;
            }
            set { }
        }

        public Singleton()
        {
            if(Instance == null)
            {
                Instance = new T();
            }
        }

        public T GetInstance()
        {
            return Instance;
        }
    }
    public class Moon : Singleton<Moon>
    {
        public int Weight()
        {
            return 10;
        }
    }
    public class Scientist
    {
        public void DoReserch()
        {
            int moonWeight = Moon.Instance.Weight();
            var a = new Moon();
            Singleton1.Instance.Method();
        }
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值