考虑一个包含超过一千个属性的理论工厂类(模型,例如,在MVC项目中)。
工厂模式用于显示功能选定级别的场景快照(在类似游戏的项目中)。工厂必须将所需的组件和模型传递给方案。
任何场景都可以重用模型和组件,但每个场景只能初始化一次(不可能与2个场景进行交易)。
所以,我的问题是:
考虑到我不需要每个组件,我不必初始化数千个属性(因为它太慢了),我怎样才能实例化组件以传递给方案,只有在我需要它的时候?
我不想为每个工厂制作一千个工厂(抽象工厂模式),我不想在工厂本身初始化对象,因为对象可以重复使用,我想避免复制/粘贴。
有没有办法在Java中按需初始化对象?
我不想收到答案“如果你有一千个属性,这是一个糟糕的概念”,我知道所有这些,但我需要处理一个旧系统,我想减少内存使用量
答案 0 :(得分:1)
您可能需要查看lazy initialization
答案 1 :(得分:1)
没有内置的,没有。
我已经使用AOP完成了一些延迟初始化技巧,例如,只要第一次引用属性,就运行初始化。对于所有对象的属性,任意子集等,可以根据需要对长时间运行的初始化进行此操作。
这不是需要用AOP完成,它可以通过普通的Java代码完成 - 但是如果已经编写了Java代码,那么它来自你控制之外的生成器,它可能有问题。
答案 2 :(得分:1)
一种选择是通过builder pattern
展示您的工厂然后,您可以拥有许多ScenarioBuilder,每个ScenarioBuilder都“知道”如何初始化给定方案的基础工厂。