享元和单例模式(六)

单例模式:整个项目只存在一个对象实例.


public class Single
    {
        private static Single _single = null;
        private static object lockObject = new object();
        private Single()
        {
           
        }
        public static Single CreateInstance()
        {
            if (_single == null)
            {
                lock (lockObject)
                {
                    if (_single == null)
                    {
                        _single = new Single();
                    }
                }
            }
            return _single;
        }
    }

如果是多线程则需要用到Lock和外层多加一层If


享元模式:可以是整个项目共用一个对象实例,也可以按需要创造不同的实例.


public static class MemberLevelConfig
{
    public static Dictionary<MemberLevel, BaseMember> MemberDictionary = new Dictionary<MemberLevel, BaseMember>()
    {
        {MemberLevel.Normal,new NormalUser() },
        {MemberLevel.Silver,new SilverUser() },
        {MemberLevel.Gold,new GoldUser() },
        {MemberLevel.Diamond,new DiamondUser() },
    };
     
}

策略模式和简单工厂中(二)中的MemberLevelConfig也算是一个简单的享元模式的应用.

Normal可以实例化新的对象,也可以项目共享MemberLevelConfig中的对象