Builder Pattern和Flyweight Pattern有什么区别?

时间:2009-11-14 05:29:58

标签: design-patterns builder-pattern flyweight-pattern

Builder Pattern和Flyweight Pattern在使用方面有什么区别,因为它们都处理大量对象?

3 个答案:

答案 0 :(得分:11)

Builder模式用于 创建 许多对象,其中Flyweight模式是关于 共享 这样的对象集合。

这两种模式都涉及“复合材料”,即可能具有多个元素的对象,但它们根本不需要一起使用。 Flyweight的原型用例是在文本编辑器应用程序中反复使用几十个字符对象的池(这是"GoF" book中给出的示例)

答案 1 :(得分:9)

直接来自维基百科。

Flyweight

  

Flyweight是一种软件设计   图案。 flyweight是一个对象   通过共享来最小化内存使用   尽可能多的数据与其他   类似的对象;这是一种使用方式   一个简单的大量对象   重复表示将使用   不可接受的记忆量。

Builder

  

Builder Pattern是一个软件   设计模式。目的是为了   抽象的建设步骤   对象让不同   这些步骤的实现可以   构建不同的表示形式   对象。

一个有助于构建对象,另一个有助于内存使用。您可以使用构建器来“构建”不同的flyweight对象。

答案 2 :(得分:2)

当“必须操纵许多物体并且这些物体无法承受无关数据”时,

flyweight模式是合适的。在Java中,String对象作为flyweight进行管理。 Java将所有固定的String文字放入文字池中。对于冗余文字,Java只在池中保留一个副本。

使flyweight工作的关键是使用工厂方法或构建器设计模式控制对象实例化。工厂方法的工作只是创建对象:给定输入条件,返回适当类型的对象。

抽象工厂类似于构建器,因为它也可以构造复杂的对象。主要区别在于Builder模式侧重于逐步构建复杂对象。抽象因子的重点是产品对象的系列(简单或复杂)。