从英文名字看,享元更强调重复使用的单例很小
Topic source你要先理解创建实例和实例变化的区别:
- 创建实例:var s = new StringBuilder();
- 实例变化:s.append("changed");
- 实例不能变化:String s = "cannot-change";
单例不是不变,是不允许创建新实例。
享元要求实例不变,所以才能把“应该创建一个新实例”的操作给优化成“直接返回一个缓存的实例”
- 1
你要先理解创建实例和实例变化的区别:
单例不是不变,是不允许创建新实例。
享元要求实例不变,所以才能把“应该创建一个新实例”的操作给优化成“直接返回一个缓存的实例”
a_bumpy_night
不知道我理解的对不对,单例一般是不变的,就像一个数据库链接的实例,只要数据库不变,实例就不变,所以总是用那个实例就行了。
享元则是一个类的实例有可能变,但是很大概率只在一个很小的范围内变化,而且变化范围内创建每个实例的开销都不大,而且这个范围的实例经常被使用,所以一开始就把他们都创建了。比如Java总是缓存了-128 到127的Integer实例