Skip to content

Latest commit

 

History

History
63 lines (41 loc) · 2.06 KB

File metadata and controls

63 lines (41 loc) · 2.06 KB

享元模式Flyweight

Brief

享元模式是一种结构型设计模式, 它摒弃了在每个对象中保存所有数据的方式, 通过共享多个对象所共有的相同状态, 让你能在有限的内存容量中载入更多对象。

See More:Refactoring.Guru

The Question

在游戏中,同时有一万个敌人。

暂时不考虑渲染压力,单纯设计一个敌人属性的实现。

敌人的属性包括:

  • 敌人的血量(各不相同)
  • 敌人的身高(各不相同)
  • 敌人的名字(根据职级不同而不同,职级有四种:新兵,中士,上士,上尉)
  • 敌人的图片路径(上尉是a.png,其他都是b.png)
  • 敌人死亡,攻击,受击时播放的音效(全都一样,string[3])
  • 敌人的颜色(全都是Color.New(128,0,128,255))
  • 敌人的血量上限(根据职级不同而变,依次是100,200,500,1000)
  • 敌人的移动速度( 根据职级不同而变,依次是 1.0 , 2.0 , 3.0, 4.0,double类型)

你会怎么实现?

Bad Code Example

查看 Bad Code里的代码


若你考虑用枚举实现,查看博客详解

Good Code Example

查看 Example 里的代码。

内存开销对比

不用享元:

用享元模式:

其他设计模式

专题 | Unity3D中的设计模式 | 问渠 (wenqu.site)