2010-03-02 2 views
5

Как ограничить создание объектов не более 3 в классе Java?Как ограничить создание объектов не более 3 в Java-классе?

Можете ли вы дать мне представление о том, как я могу это сделать?

+2

Вы ссылаетесь на шаблон дизайна erm, tripleton? Как и в, ровно три экземпляра данного класса? –

+0

Я не понимаю, в чем ваша проблема точно ... – romaintaz

+3

В каком-то смысле это обычная домашняя работа/вопрос. Я много раз видел этот вопрос (почти всегда с номером 3), и я еще не вижу веских оснований для этого ограничения. –

ответ

7

Включите свой класс через завод (см. Шаблоны проектирования) и ограничьте его до 3-х экземпляров с помощью простого счетчика.

+0

простой статический счетчик и имеют заводской метод синхронизации. –

1

Заводская схема - путь. Или можно использовать статический счетчик. Необходимо внимательно следить за безопасностью потока.

1

Вы также можете посмотреть ObjectPool Apache Commons. Исходный код находится в свободном доступе ...

7

Мы можем ограничить создание объекта для конкретного класса с помощью небольшой модификации в Singleton шаблон проектирования, как показано ниже:

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); 
     } 
} 

Выход выше код, как:

[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 

После создания трех разных объектов он повторяет один и тот же третий объект снова и снова. Он не создает другой объект.

0

Почему бы не назначить limInstance = null; в противном случае в getLimInstance()? в этом случае он не будет предоставлять дубликаты 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); 
    } 

}

Результат был таков:

[email protected]

[email protected]

[email protected]

null

нуль

нуль

[email protected]

0

Вам нужно изменить одноплодные и создать три objects.ans написать три метода в каждом методе возврат объекте вроде как возвращение различных три объектов и использовать, когда вам нужно. в основном не нужно объявлять переменную или объект как статические, так как всегда возвращать один и тот же объект.

Смежные вопросы