享元和单例模式(六)
单例模式:整个项目只存在一个对象实例.
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中的对象