Discuss / Java / 从英文名字看,享元更强调重复使用的单例很小

从英文名字看,享元更强调重复使用的单例很小

Topic source

a_bumpy_night

#1 Created at ... [Delete] [Delete and Lock User]

不知道我理解的对不对,单例一般是不变的,就像一个数据库链接的实例,只要数据库不变,实例就不变,所以总是用那个实例就行了。

享元则是一个类的实例有可能变,但是很大概率只在一个很小的范围内变化,而且变化范围内创建每个实例的开销都不大,而且这个范围的实例经常被使用,所以一开始就把他们都创建了。比如Java总是缓存了-128 到127的Integer实例

廖雪峰

#2 Created at ... [Delete] [Delete and Lock User]

你要先理解创建实例和实例变化的区别:

  • 创建实例:var s = new StringBuilder();
  • 实例变化:s.append("changed");
  • 实例不能变化:String s = "cannot-change";

单例不是不变,是不允许创建新实例。

享元要求实例不变,所以才能把“应该创建一个新实例”的操作给优化成“直接返回一个缓存的实例”

🌙

#3 Created at ... [Delete] [Delete and Lock User]

谢谢 单例  不可以创建对象 还是可以改变的

Red

#4 Created at ... [Delete] [Delete and Lock User]

对的,单例一般是不允许创建新实例,享元的思想是用同一个实例


  • 1

Reply