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

edg*_*000 21 design-patterns objectpool flyweight-pattern

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

Gab*_*res 31

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

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

  • 最好的答案!我认为Flyweight通常用于最小化内存量,因为它仅包含唯一的项。对象池可以提高性能,但会导致高内存消耗。 (3认同)

cas*_*nca 5

至少会出现两个主要差异:

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