如果有很多相同/相似的对象, 我们可以通过享元节省内存.
内部状态 vs. 外部状态
?
享元模式(Flyweight): 运用共享技术有效地重用大量细粒度的对象.
享元对象能做到共享的关键是区分了内部状态和外部状态:
此处输入图片的描述
在享元对象内部并且不会随环境改变而改变的共享部分, 可称之为享元对象的内部状态.
在设计开发中,有时需要生产大量细粒度对象来表征数据, 如果这些对象除个别参数外基本相同, 此时如果能把那些参数移到类实例外面, 在方法调用时将其传入, 就可以通过共享大幅度减少类实例数目.
模式实现
案例: 围棋设计
有下棋经验的同学都知道一盘棋的棋子大小、材质、颜色(黑/白)往往都是确定的, 而围棋落子的位置却不一定(看水平高低了O(∩_∩)O!)
但相比原先的设计, 增加了实现复杂度, 且读取外部状态使得运行时间变长(时间换空间).