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

时间:2012-06-19 21:02:50

标签: java initialization

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

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

任何场景都可以重用模型和组件,但每个场景只能初始化一次(不可能与2个场景进行交易)。

所以,我的问题是:

考虑到我不需要每个组件,我不必初始化数千个属性(因为它太慢了),我怎样才能实例化组件以传递给方案,只有在我需要它的时候?

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

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

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

3 个答案:

答案 0 :(得分:1)

您可能需要查看lazy initialization

答案 1 :(得分:1)

没有内置的,没有。

我已经使用AOP完成了一些延迟初始化技巧,例如,只要第一次引用属性,就运行初始化。对于所有对象的属性,任意子集等,可以根据需要对长时间运行的初始化进行此操作。

这不是需要用AOP完成,它可以通过普通的Java代码完成 - 但是如果已经编写了Java代码,那么它来自你控制之外的生成器,它可能有问题。

答案 2 :(得分:1)

一种选择是通过builder pattern

展示您的工厂

然后,您可以拥有许多ScenarioBuilder,每个ScenarioBuilder都“知道”如何初始化给定方案的基础工厂。