一、什么是享元模式
就是在其他地方都能使用同一个对象,但是与单例又有些区别,因为单例需要改造类,增加单例逻辑,破坏单例封闭。
二、享元模式的作用
享元模式是为了解决对象的复用问题,提供第三方的管理,能完成对象的复用,提升性能。
它还可以再次实例化对象,不像单例模式全局唯一。
可以实现池化资源管理,避免重复的创建和销毁对象,尤其对于非托管资源。
三、享元模式的使用场景
其他都需要使用同一对象时,使用享元模式可以提升性能。
四、如何实现享元模式
在项目中,我们有时会多次使用同一个对象,如下图:
此时对象会被重复多次创建,这样感觉非常的麻烦占资源,现在对它进行改造,这里就直接写最终的方案了,懒得一步步升级了。
此时就只会实例化一次,然后可以重复使用了。
以下为部分代码:
简单工厂,用于创建对象并存起来方便重用,ComputerFactory.cs:
namespace Flyweight
{
public class ComputerFactory
{
private static Dictionary<Component, BaseObj> computerDictionary = new Dictionary<Component, BaseObj>();
private readonly static object ComputerLock = new object();
public static BaseObj GetObj(Component component)
{
if (!computerDictionary.ContainsKey(component))
{
lock (ComputerLock)
{
if (!computerDictionary.ContainsKey(component))
{
BaseObj baseObj;
switch (component)
{
case Component.Host:
baseObj = new HostObj();
break;
case Component.Keyboard:
baseObj = new KeyboardObj();
break;
case Component.Monitor:
baseObj = new MonitorObj();
break;
case Component.Mouse:
baseObj = new MouseObj();
break;
case Component.Voicebox:
baseObj = new VoiceboxObj();
break;
default:
throw new Exception("未知计算机零件!");
}
computerDictionary.Add(component, baseObj);
}
}
}
return computerDictionary[component];
}
}
public enum Component
{
Host,
Keyboard,
Monitor,
Mouse,
Voicebox
}
}
以上为本章所有内容。
完。