享元模式通过共享内部状态减少内存使用,如示例中多棵树共享相同TreeType实例,仅外部位置不同,从而在大量相似对象场景下显著降低内存开销。

在C++中,享元(Flyweight)模式是一种用于减少内存使用的设计模式,特别适用于大量相似对象的场景。它的核心思想是共享尽可能多的相同数据,把不变的部分提取为“内部状态”,而将变化的部分作为“外部状态”传入,避免重复创建对象。
享元模式的核心结构
享元模式通常包含以下几个部分:
-
Flyweight(抽象享元类):定义接口,描述操作外部状态的方法。
-
ConcreteFlyweight(具体享元类):实现Flyweight接口,并存储内部状态(可共享)。
-
UnsharedConcreteFlyweight(非共享具体享元):某些情况下不需要共享的对象,可选。
-
FlyweightFactory(享元工厂):负责管理享元对象,通过键值缓存已创建的实例,避免重复创建。
一个实际的C++实现示例
假设我们要绘制森林中的树,每棵树有种类(type)、颜色、高度等属性。其中“种类”和“颜色”是固定的,可以共享;而“位置(x, y)”是变化的,应作为外部状态传入。
立即学习“C++免费学习笔记(深入)”;
#include
#include
#include