是什么内在和外在状态之间的差异,如享元模式说明?(What is the difference be

2019-07-18 11:40发布

从本章FlyWeight内侧的图案四人帮 Flyweight模式适用于当大多数对象状态可以制成外在的

什么是extrinsic state是什么意思? 我得到这个图案用于对象共享的感觉。 如果对象被共享,那么怎么能说的对象,不管有什么状态呢?

Answer 1:

无论具体的写法在该项目符号列表,了解信息是很重要的: 飞锤适用于其中的数据的一个重要组成部分,可以在多个对象之间共享,因为它是不可变的情况。 与字体面的例子使这很清楚; 从日常的Java的例子是java.util.regex.Pattern ,不可改变的外在状态下的安装与Matcher ,一个可重用,并持有当地内在状态的轻量级。 许多Matcher S可同时存在,所有重用在里面编译的正则表达式。

这句话使事情不是从你的问题的一个更清晰的:

越飞摆是共用的,所述存储节省就越大。 储蓄与共享状态的量增加。 最大程度地节省发生时,对象使用内在和外在的状态相当数量和外在状态可以被计算,而不是存储。 然后,你的存储保存方式有两种:共享降低内在状态的成本,和你交易的外在状态计算时间。



Answer 2:

让我们一个字处理器的例子:

一个字处理器与性格对象的交易。 字符对象的状态是字符的内容,字体,样式,位置等(只要字处理器而言)。 不同的文档使用字符的不同实例。 假如我们只是处理的AZ字符,不同的文档使用从AZ的字母池,但可能应用不同的字体/样式。 所以,如果我们的字符的内容从字体/样式分开,我们可以分享这些字符,这是有道理的,因为总的不同类型的字符进行比较,使用的字符的不同实例(在本例中26,但恒定的,否则)少在不同的文档。 共享这些字符情况下,就意味着分享智慧含量的Character实例和外敷,如字体/样式上下文这些字符。 字符内容是内在的状态和字体/风格是外在的状态。 分离状态转变的内在和外在状态导致在上面的例子中巨大的节省存储空间。



Answer 3:

外在 - 状态属于所述对象的(外部)或独有的实例的上下文

本征 - 状态自然属于“轻量级”对象,因此应是永久的或不可变的(内部)或上下文无关。



文章来源: What is the difference between intrinsic and extrinsic state as described in Flyweight Pattern?