当我们只想创建一个类的对象时,我们使用单例设计模式。我想创建我的课程的最多3或5个对象。有什么办法来限制Java中最大的对象创建次数吗?Java创建一个类的最多3个对象
回答
当然,你可以很容易地实现一个类似单例的特性,但是你显然要找的是Object Pool。
有这样的水池的许多实现,一个显着的一个apache commons/pool
正如seanizer提到你会实现的东西,已经做了,但是,如果你只是有这样的一类,你是担心,加入一个新的jar文件,并用它来进行这样一个微不足道的操作对我来说似乎过度。
一个简单的方法是有一个n(3-5)的数组,并且在“singleton”类中有一个私有构造函数。然后你将有一个instanceOf
方法,这是获取对象的唯一方法。
此方法将查看创建的对象的数量是否为<n,如果是,则创建一个新对象并将其返回。
但是,如果所有对象都已经发出,您想要做什么?
当您完成对象时,您需要确保将对象返回到池中,否则您将耗尽对象以分发。
当你发放一个对象时,你可以将它复制到一个集合或数组中,以知道它已经出来,或者,只要有一个布尔n的数组,当对象可用时为true发放。
基本设计很简单,其复杂性在于如何处理可能是错误条件的情况,在您的程序的其余部分。
另外,您需要确保使用finally
块返回对象,以便在出现异常时仍然返回该对象。
在类中有一个静态字段,用于计算实例已创建的次数。
class Foo {
private static Integer num_instances = 0, MAX = 3;
public Foo() throws Exception {
synchronized(Foo.num_instances) {
if(Foo.num_instances > MAX) throw new Exception();
Foo.num_instances++;
}
}
}
编辑:它可能是坏的形式从构造函数抛出一个异常,那么你可以做以下改为:在任何如果您想池(最大NUM内存:
class Foo {
private static Integer num_instances = 0, MAX = 3;
public Foo try_to_get_a_new_foo() {
synchronized(Foo.num_instances) {
if(Foo.num_instances > MAX) return null;
Foo.num_instances++;
return new Foo();
}
}
}
EDIT 2给定的时间),只需要实现的finalize():
class Foo {
private static Integer num_instances = 0, MAX = 3;
public Foo try_to_get_a_new_foo() {
synchronized(Foo.num_instances) {
if(Foo.num_instances > MAX) return null;
Foo.num_instances++;
return new Foo();
}
}
public void finalize() {
synchronized(Foo.num_instances) {
Foo.num_instances--;
}
super.finalize();
}
}
此处的问题是,对象可能早已被垃圾收集而计数仍然存在。你需要在内存中保存这些对象来改变它,然后你又有了一个池。 – 2010-07-25 20:40:18
因为您正在更改您在同步代码内进行同步的实例,所以在此处尝试同步Foo.num_instances时是完全错误的。它不会做你认为它的做法。 – Jorn 2010-07-25 20:42:28
@seanizer OP说:“我想创建我的班级最多3或5个对象”,他没有提及有多少内存实例。 @Jorn - Foo.num_instances是静态的,所以我没有改变我正在同步的实例。在说我“完全错误”之前,请提供一个代码示例或一个清晰的解释。 – twolfe18 2010-07-27 13:01:45
可能是你正在寻找Multiton Pattern
- 1. Java创建一个包含多个对象的类的列表
- 2. Python3,一次创建一个类的多个对象
- 3. Swift 3创建一个NSNumber对象
- 4. 创建一个Java类的新对象返回一个空对象
- 5. 在java中创建多个对象oop
- 6. 创建了多少个对象 - Java
- 7. 创建多个子类对象
- 8. 关于创建一个类的对象
- 9. 用单一形式创建多个对象(类似的类型)
- 10. 创建一个具有另一个类的对象的类
- 11. 在Java中创建一个XML对象
- 12. 从多个变量类型创建一个对象
- 13. Three.js创建多个对象
- 14. 创建多个Firebase对象
- 15. MultipleChoiceField创建多个对象
- 16. 创建多个对象
- 17. 多个simple_html_dom()对象创建
- 18. java创建一个从不同类继承的对象的ArrayList
- 19. 创建一个全局对象或多个本地对象
- 20. 如何在Excel中创建一个java类的对象vba
- 21. 创建一个类的jar为了发送对象JAVA
- 22. 在java中创建另一个类的对象
- 23. 如何创建,创建最多100个对象
- 24. 在Python中创建多个类或多个对象?
- 25. 优化Android/Java代码 - 创建同一对象类型的多个实例
- 26. 创建一个Java Car类
- 27. 如何用另一个参数创建一个类的对象? Java
- 28. 发送/创建一个对象到/在一个单独的Java类中
- 29. 根据Java中另一个对象的状态创建一个对象
- 30. 创建一个新对象
你想创建3(或5)个相同(即可互换)的对象,或者它们应具有不同的特征(即,字段值)? – 2010-07-26 10:54:24
清除http://stackoverflow.com/questions/3164379/only-5-instances-of-a-class的副本,请参阅我接受的解决方案的答案 – GHad 2010-09-17 08:55:11