Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 为什么(GoF)Flyweight是一种结构性(而非创造性)设计模式?_Design Patterns_Flyweight Pattern - Fatal编程技术网

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

Design patterns 为什么(GoF)Flyweight是一种结构性(而非创造性)设计模式?,design-patterns,flyweight-pattern,Design Patterns,Flyweight Pattern,据我所知,flyweight设计模式与factory或singleton设计模式没有太大区别 它只是一个产生不可变(和池化)对象的工厂。 它只是一个为每种类型(托管对象)提供一个实例的单实例,而不是一个全局单实例 Factory和singleton是创造性模式,因此为什么要将flyweight视为结构模式?flyweight模式不创建任何对象。它用于存储多个对象之间共享的数据。您可以将其使用与类中的静态方法/变量进行比较。您可以使用保存此方法或数据的全局实例来减少应用程序的内存占用,而不是为每个

据我所知,flyweight设计模式与factory或singleton设计模式没有太大区别

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


Factory和singleton是创造性模式,因此为什么要将flyweight视为结构模式?

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


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

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


使图案具有结构的是使用类似工厂的类来获得飞锤。这就给设计带来了一种静态结构。

一方面,模式的分类并不重要,在某些情况下一开始可能会显得随意。另一方面,我不同意说它只是一个生产不可变对象的工厂。GoF中的抽象工厂和工厂方法有更多的上下文。许多人混淆了简单工厂和工厂方法。