如何在Java类中限制对象创建不超过3?
如何在Java类中限制对象创建不超过3?
你能告诉我怎么做吗?
通过工厂实现您的课程(参见设计模式),并使用简单的计数器将其限制为3个实例。
我们可以通过在Singleton设计模式中进行少量修改来限制特定类的Object的创建,如下所示:
public class LimitClass { private static LimitClass limInstance; public static int objCount = 0; private LimitClass(){ objCount++; } public static synchronized LimitClass getLimInstance(){ if(objCount < 3 ){ limInstance = new LimitClass(); } return limInstance; } } public class LimitObjectCreationTest { public static void main(String[] args) { LimitClass obj1 = LimitClass.getLimInstance(); LimitClass obj2 = LimitClass.getLimInstance(); LimitClass obj3 = LimitClass.getLimInstance(); LimitClass obj4 = LimitClass.getLimInstance(); LimitClass obj5 = LimitClass.getLimInstance(); LimitClass obj6 = LimitClass.getLimInstance(); System.out.println(obj1); System.out.println(obj2); System.out.println(obj3); System.out.println(obj4); System.out.println(obj5); System.out.println(obj6); } }
上面代码的输出如下:
com.pack2.LimitClass@19821f com.pack2.LimitClass@addbf1 com.pack2.LimitClass@42e816 com.pack2.LimitClass@42e816 com.pack2.LimitClass@42e816 com.pack2.LimitClass@42e816
在创建三个不同的对象之后,它一次又一次地重复相同的第三个对象。 它不是创建不同的对象。
你需要修改单身人士。 看到这个 – 相同的OOPS(设计模式)
工厂模式是要走的路。 或者可以使用静态计数器。 需要注意线程安全性。
您还可以查看Apache Commons的ObjectPool 。 源代码免费提供……
为什么不分配limInstance = null; 在getLimInstance()的else情况下? 在这种情况下,它不会提供obj3重复?
public static synchronized InstanceClass getLimInstance() { if(objCount < 3 ){ limInstance = new InstanceClass(); } else { limInstance=null; } return limInstance; } public class LimitObjectCreationTest { public static void main(String[] args) { InstanceClass obj1 = InstanceClass.getLimInstance(); InstanceClass obj2 = InstanceClass.getLimInstance(); InstanceClass obj3 = InstanceClass.getLimInstance(); InstanceClass obj4 = InstanceClass.getLimInstance(); InstanceClass obj5 = InstanceClass.getLimInstance(); InstanceClass obj6 = InstanceClass.getLimInstance(); System.out.println(obj1); System.out.println(obj2); System.out.println(obj3); System.out.println(obj4); System.out.println(obj5); System.out.println(obj6); System.out.println(obj3); }
}
结果如下:
come.classinstance.InstanceClass@4a5ab2
come.classinstance.InstanceClass@1888759
come.classinstance.InstanceClass@6e1408
空值
空值
空值
come.classinstance.InstanceClass@6e1408
你需要修改单例并创建三个对象。在每个方法返回对象中编写三个方法,如返回不同的三个对象,并在需要时使用。 它主要用于不需要将变量或对象声明为静态,因为总是返回相同的对象。