我想创建一个允许我拥有许多对象并将它们存储在数据结构中的类。这些对象将从列表中取出然后放回到列表中。在执行程序期间,此循环将重复多次,以便始终在此列表中显示不同的对象。
我对两个方面非常感兴趣:
目前创建的对象如下:
for(int i = 0; i < NUMBER; i++)
new WhitePlate(0,2,5);
是否有一种设计模式可以让这更容易?我在想,从我读到的,工厂设计模式或构建器可以解决这个问题,我应该使用它。
当我必须创建多个对象并将它们保存在数据结构中时,您建议我使用哪种设计模式?
我将使用的数据结构是微不足道的,并不重要,但我将使用哈希。
答案 0 :(得分:2)
您在问题中描述的是对象池。
对象池并不是前所未有的。我已经看到它们在Java程序中使用,其目标是消除垃圾收集压力。它们通过创建普通集合,用对象填充该集合,然后而不是调用{{}来工作。 1}},你只需从集合中抓取一个未使用的对象。
这是否有助于您的特定计划是一个悬而未决的问题。您必须以传统方式和对象池方式尝试它,运行一些测试,并查看哪种方式更好。毫无疑问,对象池将使用更多内存,但内存使用总量的变化要小得多。
答案 1 :(得分:0)
Prototype是一种创建模式,如果您的对象单独创建昂贵,可能会有所帮助。另一种方法是代理模式,它通过创建占位符对象(代理对象)来延迟创建昂贵的对象,直到需要真实对象为止; 延迟加载的一个例子。
但是你说你的数据结构是微不足道的,所以上述两者都不适用:甚至代理也可以避免在执行许多单独的简单内存分配时冻结UI。您可以使用延迟加载来最小化许多对象构造的影响,如评论者所建议的那样。因此,如果您在启动时需要1,000个对象,但速度慢得令人无法接受,请重新设计UI,使其外观和行为与正常情况相同,只有100个对象。然后你只需要在启动时构建100个对象 ;其余的可以在以后构建。
以后是什么时候&#39;?你有一些选择:
另一种可能性是在后台线程上构造所有1,000个对象,允许UI线程在呈现初始UI状态时自由地完成最少的工作。但如果您不需要在初始阶段显示1,000个对象中的任何一个,这可能只是一个选项。
最后,网上有资源,例如。 MSDN杂志,关于缩短启动时间的一般指导原则,例如只创建所需的最小形式。