考虑一个包含一千多个属性的理论工厂类(例如,MVC项目中的模型)。
工厂模式用于显示选定级别的函数中的场景快照(在类似游戏的项目中)。工厂必须将所需的组件和模型传递给场景。
模型和组件可以被任何场景重用,但每个场景只能初始化一次(两个场景不可能进行交易)。
所以,我的问题是:
考虑到我不需要每个组件,我不需要初始化数千个属性(因为它太慢了),我如何实例化组件以传递给场景,只有当我需要它的时候?
我不想为每个工厂创建一千个工厂(抽象工厂模式),也不想在工厂本身初始化对象,因为对象可以重用,我想避免复制/粘贴。
在Java中,有没有一种按需初始化对象的方法?
我不想收到这样的回答:“如果你有一千个属性,这是一个糟糕的概念”,我知道这一切,但我需要处理一个旧系统,我想减少内存使用。
发布于 2012-06-20 05:08:39
没有内置的,没有。
我已经使用AOP做了一些延迟初始化的技巧,例如,一旦属性第一次被引用,就运行初始化。根据需要,这只适用于长时间运行的初始化,适用于对象的所有属性、任意子集等。
这不需要用AOP来完成,它可以通过普通的Java代码来完成-但是如果Java代码已经写好了,是来自你控制之外的生成器,等等,这可能会有问题。
发布于 2012-06-20 05:08:34
您可能想要研究一下lazy initialization
发布于 2012-06-20 05:09:18
一种选择是通过builder pattern公开您的工厂
然后,您可以拥有多个ScenarioBuilders,每个都“知道”如何为给定的场景初始化底层工厂。
https://stackoverflow.com/questions/11109392
复制相似问题