gpt4 book ai didi

design-patterns - multiton 模式 vs 享元模式

转载 作者:行者123 更新时间:2023-12-04 07:13:00 24 4
gpt4 key购买 nike

我看不出 Multiton 之间有任何区别和 Flyweight模式。请说明有什么区别?

最佳答案

这些模式具有相似的结果,但这几乎是巧合,因为意图不同。

对我来说,享元的主要目的是通过共享状态来减少内存。

multition 的主要目的是当您使用相同的键获取实例时,始终返回完全相同的对象实例(单例)。

  • 多重化
  • 保证任何键都只存在一个对象实例,例如单键模型
  • 蝇量级
  • 通过在对象之间共享状态来减少内存消耗。

  • 享元的经典示例是在文字处理器中,其中每个字母由一个对象表示,并且为了避免为每个字母创建多个对象,而每个字母只存在一个实例。

    可以通过使用 multition 来实现这一点,该 multition 确保对于键 'A' 返回表示 'A' 的对象的相同实例。在这种情况下,这些模式确实看起来很相似。

    但是享元并不要求只能存在一个实例(这是 multition 模式的要求)。因此,也可能有一个文字处理器的实现,其中每个文档都有一个每个字母对象的实例。

    这仍然会大大减少内存量,我相信仍然是享元模式的一个实例,但不会是乘法模式,因为字母“A”的许多实例可能存在于不同的文档中。

    您还可以使用享元模式在许多其他不适用多重模式的情况下减少内存消耗。这可能不是一个完美的例子,但想象一个系统,它提供了学校的学生名单和他们参加的类(class)。如果您有一个 student 对象,其中包含学生参加的类(class)列表,并且类(class)列出了房间、老师、可用设备等。

    在一个简单的模型中,学生可能有一个 Class 对象的集合,并且每个 Class 对象都会为每个学生创建新的。您在每个学生身上存储了许多对象,这可能需要大量内存。相反,您可以为 Class 使用享元并仅在每个参加该类(class)的学生中存储对同一 Class 实例的引用。这将显着减少存储大量学生所需的内存。

    但是 Class 实例可能不适合作为单例,因为类本身是数据驱动的和动态的(可以添加和删除新类等),因此 multition 模式在这里不合适。

    关于design-patterns - multiton 模式 vs 享元模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26381057/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com