首页/开发/代码质量与评审速查/享元模式 Flyweight(结构型)
设计原则与模式62 条

享元模式 Flyweight(结构型)

共享大量细粒度对象的不可变部分(内部状态),把可变上下文(外部状态)留在调用方:降低内存与构造开销;经典场景是字符排版、地图瓦片、缓存池。

意图共享内部状态、分离外部状态
前提对象量大且大部分状态可复用
配套工厂管理共享池 + 弱引用/上限控制

形态示意

形态示意
class TreeType {    // 内部状态:种类、贴图
    void draw(int x, int y);  // 外部状态逐次传入
}
// 森林中数万棵树共享少量 TreeType

易错点

  • 把可变状态也共享:全局脏数据,互相串改
  • 无度量先上享元:复杂度先行、收益未知

数据来源与参考

  • 《设计模式》(GoF)· Flyweight
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌