思想: 顾名思义共享一个对象, LOL赛事现场直播是一个对象, 这个对象被共享到每个视频客户端, 这样不会因为创建大量重复的对象而浪费内存;
- 角色说明
- 抽象的享元类;
- 内部状态: 不会发生改变的属性, 比如一盘棋, 其中的棋盘尺寸和棋子颜色是恒定不变的;
- 外部状态: 会变化的属性抽离后组合进享元对象, 棋盘中棋子坐标;
- 享元工厂: 构建享元对象缓存池(集合), 享元工厂里只能存内部状态;
- 站点发布形式案例
- 站点形式有: 微博, 腾讯新闻 ...
- 发布人: hack, jack, tom
- 对象说明
- IWebSiteFlyWeight: 享元对象;
- WebSiteFlyWeightFactory: 享元工厂, 内置享元缓存池;
- 代码实现
- 从打印的信息可看出, 站点形式是内部状态, 发布人是外部状态组合进享元对象
- Java中用到的地方
- Integer.valueOf()包装类; 在-128 ~ 127 范围时从享元池中取, 不在则创建新的对象;
- Integer a == Integer.valueOf();
- 非包装类注意