23

据我所知,对象池是一种创建模式,享元是一种结构模式,但实际上我看不出两者之间有太大区别。有人可以向我解释其中的区别以及每种方法在实现中何时有用吗?

4

3 回答 3

34

一个不同之处在于享元通常是不可变的实例,而从池中获取的资源通常是可变的。

因此,您创建享元以避免重复创建包含相同状态的对象的多个实例的成本(因为它们都是相同的,您只需创建一个并在应用程序的所有位置重用它),而池中的资源是特定的您想要单独控制并且可能具有不同状态的资源,但您不想支付创建和销毁的成本,因为它们都在相同的状态下初始化。

于 2012-02-17T02:56:27.370 回答
5

至少有两个主要区别浮现在脑海中:

  • 对象池是一组域对象的容器,而享元通常一个域对象。
  • 一个对象池通常包含一组可以并发共享的相似对象,例如数据库连接,而通常有一组不同的享元对象,每个对象代表不同的状态。
于 2012-02-17T03:07:22.963 回答
1

该站点通过特定示例描述了这两种模式。它在澄清差异方面做得非常好,并支持加布里埃尔的上述回应。 http://www.oodesign.com/

于 2012-02-17T03:07:56.250 回答