(11)结构型模式——享元
结构型模式——享元(Flyweight) 目录 结构型模式——享元(Flyweight) 问题背景 解决方案 效果 缺陷 相关模式 实现 问题背景 当使用大量细粒度对象,需要提高系统性能时,考虑使用享元。现在我们要为一个RPG游戏设计装备系统,首先根据需求提取出装备类的属性,可能包括:标识符、名称、描述、装备类型、初始属性取值集合、穿戴条件、属性集合、耐久上限、当前耐久、最高强化等级、强化等级……我们会发现这些属性中,有些在同种装备中都是相同的,并且在运行时不会改变,比如名称、描述、初始属性取值集合、最高强化等级,我们把这些属性称为“静态属性”;还有一些是每个装备实例都不同的,在运行时会改变,比如属性集合、当前耐久、强化等级,我们把这些属性称为“动态属性”。 如果将静态属性和动态属性放在同一个类里,一方面会导致每个实例都维护大量相同数据,严重影响程序的性能;另一方面无法显示地区分静态属性和动态属性,容易造成混淆,尤其是这种涉及到类(class)和分类(category)两种相似概念的系统。 解决方案 把静态属性和动态属性放在同一个类中会导致运行性能低下,系统难以理解。下面使用享元,将静态属性和动态属性拆开。 增加一个类EquipmentFlyweight来存放静态属性,原本的Equipment类中的静态属性改为对EquipmentFlyweight的引用。如此一来