unity中的单例模式

单例模式最重要的是不要被new来使用,在C++中可以把构造函数设置为私有或者虚继承等方法来防止被new来使用,在C#中也可以通过下面代码来实现。如果被new了,那么_instance一定是null的,在使用单例的之前,我们可以先用Init()来初始化,其他情况也可以先用CheckSingleton来检查是否被正确调用。注意这不是一个线程安全的单例。

    public abstract class ServiceModule<T>:Module where T : ServiceModule<T>,new()
    {
        private static T _instance;

        public static T Instance
        {
            get { return _instance ?? (_instance = new T()); }
        }

        //在派生类中检查
        protected void CheckSingleton()
        {
            if (_instance == null)
            {
                Exception e = new Exception("这是一个单例,无法实例化");
                throw e;
            }
        }

        protected virtual void Init()
        {
            this.Log("Init()");
            CheckSingleton();
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值