gpt4 book ai didi

c# - 了解享元模式

转载 作者:可可西里 更新时间:2023-11-01 08:05:06 26 4
gpt4 key购买 nike

Intent:

The intent of this pattern is to use sharing to support a large number of objects that have part of their internal state in common where the other part of state can vary.

对象可以通过静态字段共享状态。

使用享元模式和使用静态字段共享大量对象的内部状态有什么区别?

享元通过其工厂提供的对象池是享元的真正含义吗?

最佳答案

使用静态字段,在任何一个时间点只能有一个对象实例在使用中。使用享元模式,您可以同时使用任意数量的不同实例(每个实例都被多次使用)。享元模式的典型示例是文本编辑器,您需要为文档中的每个字符实例化一个对象。一个 10,000 字文档中的每个字符都不需要在内存中有一个对象,那么您只需要 26 个对象(假设文档只使用小写字母),一个用于字母“a”,一个用于字母“b”,等等., 并且它们在整个文档中被短暂地、一遍又一遍地重复使用,每次您需要执行需要“a”对象的某些功能或操作时。

编辑:回答下面第一条评论的问题:
因此,由于您需要 26 个不同的对象,因此创建静态或单例的 Letter 类是行不通的。如果它是静态的,则您不能创建任何实例,因此无论静态值如何,都必须适合您使用它的代码中的每个地方。如果它是一个单例,那么你当然只有一个对象。每次使用时,每个属性都必须是可调整的(和已调整的)。要将此模式用于字母表中的字母,您必须有 26 个不同的类,每个字母一个...

此外,“类的可以变化的部分”实际上意味着某些字段代表类的每个实例的不同状态。而公共(public)部分意味着那些公共(public)字段的值对于匹配这些状态值(例如所有'a')的对象的所有使用都是公共(public)的,而不是对于每个实例类(class)。

再次以文本编辑器为例。代码中每个需要处理“a”字符的地方,首先,转到存储 26 个字符对象实例的数据结构,并获取“a”实例,您将首先修改/更改 varying 属性(这些属性与它作为“a”的性质无关,但可能与它的字体大小、位置、颜色等相关)以满足此需求文档中的特定字符“a”。
然后,您可以利用该对象做任何您需要用它做的事情,然后将它返回到存储结构,以便下次您的代码需要“a”时重用。

关于c# - 了解享元模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23684037/

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