如何在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

你需要修改单例并创建三个对象。在每个方法返回对象中编写三个方法,如返回不同的三个对象,并在需要时使用。 它主要用于不需要将变量或对象声明为静态,因为总是返回相同的对象。