Flyweight vs对象池模式:什么时候有用?

时间:2012-02-17 02:37:03

标签: design-patterns flyweight-pattern objectpool

据我所知,对象池是一个创建模式,而flyweight是一个结构模式,但实际上我看不出两者之间有很大差异。有人可以向我解释一下这些差异以及每种方法在实施中的用途吗?

3 个答案:

答案 0 :(得分:29)

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

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

答案 1 :(得分:5)

至少会出现两个主要区别:

  • 对象池是一组域对象的容器,而flyweight通常 是域对象。
  • 对象池通常包含一组可以同时共享的类似对象,例如数据库连接,而通常有一组不同的flyweight对象,每个对象代表不同的状态。

答案 2 :(得分:1)

此网站使用特定示例描述了这两种模式。它做了一个非常好的工作,澄清了差异,并支持加布里埃尔的回应。 http://www.oodesign.com/