1

考虑一个包含一千多个属性的理论工厂类(例如,MVC 项目中的模型)。

工厂模式处理在选定级别(在类似游戏的项目中)的功能中显示场景快照。工厂必须将所需的组件和模型传递给场景。

模型和组件可以被任何场景重用,但是每个场景只能初始化一次(不可能玩2个场景的交易)。

所以,我的问题是:

考虑到我不需要每个组件,我不必初始化数千个属性(因为它会太慢),我如何实例化组件以传递给场景,只有当我需要它时?

我不想为每个工厂创建一千个工厂(抽象工厂模式),也不想在工厂本身中初始化对象,因为对象可以重用并且我想避免复制/粘贴。

有没有办法在 Java 中按需初始化对象?

我不想收到“如果你有一千个属性,这是一个糟糕的概念”的答案,我知道这一切,但我需要处理一个旧系统,我想减少内存使用量。

4

3 回答 3

1

您可能想研究延迟初始化

于 2012-06-19T21:08:33.687 回答
1

没有内置的,没有。

我已经使用 AOP 完成了一些延迟初始化技巧,例如,一旦第一次引用某个属性,就运行初始化。这可以仅针对长时间运行的初始化、对象的所有属性、任意子集等进行,具体取决于需要。

这不需要使用AOP 来完成,它可以通过普通的 Java 代码来完成——但如果 Java 代码已经编写,来自您控制之外的生成器等,这可能会出现问题。

于 2012-06-19T21:08:39.210 回答
1

一种选择是通过构建器模式公开您的工厂

然后,您可以拥有许多 ScenarioBuilders,每个 ScenarioBuilders 都“知道”如何为给定的 Scenario 初始化底层工厂。

于 2012-06-19T21:09:17.780 回答