为什么(GoF)Flyweight是一种结构(而非创造)设计模式?

时间:2015-06-09 23:01:37

标签: design-patterns

据我了解,flyweight设计模式与工厂或单件设计模式没有太大区别。

它只是一个生产不可变(和池)对象的工厂。 它只是一个单例,为每个类型(托管对象)提供一个实例,而不是全局单个实例。

工厂和单身是创作模式,所以为什么要将flyweight视为结构模式?

2 个答案:

答案 0 :(得分:4)

Flyweight模式的本质不是创建对象而是共享它们。该模式指出要共享的对象通常保存在某些外部数据结构中,但未指定如何创建或表示这些数据结构。

使图案结构化的原因是使用类似工厂的类来获得飞重。这在设计上强加了静态结构。

答案 1 :(得分:1)

flyweight模式不会创建任何对象。它用于存储多个对象之间共享的数据。您可以将其用法与类中的静态方法/变量进行比较。您可以使用包含此方法或数据的全局实例来减少应用程序的内存占用,而不是为每个实例定义它们。

假设您使用多个解析器解析大型数据文件,而不是让每个解析器读取完整的数据文件,您可以使用flyweight模式来保存每个解析器可以访问的数据文件的单个实例。