Предельное создание экземпляров класса?

Ответы обычно находятся в книгах Java.

  1. клонирование: Если Вы не переопределяете метод клона, поведение по умолчанию является мелкой копией. Если Ваши объекты имеют только примитивные членские переменные, это полностью в порядке. Но на языке без типов с другим объектом как членские переменные, это - головная боль.

  2. сериализация/десериализация

$new_object = unserialize(serialize($your_object))

Это достигает глубокой копии с большой стоимостью в зависимости от сложности объекта.

10
задан Roman Starkov 9 August 2010 в 19:22
поделиться

5 ответов

Сохранять статическую переменную с количеством созданных экземпляров. Увеличивайте это число с каждым построением объекта. Сделайте объект IDisposable и уменьшайте это число при каждом вызове Dispose (). Если вы хотите, чтобы он был потокобезопасным, используйте Interlocked.Increment () и Interlocked.Decrement (), чтобы изменить значение этой переменной вместо ++ и -.

19
ответ дан 3 December 2019 в 14:06
поделиться

Вам просто нужно будет использовать фабричный шаблон со счетчиком количества созданных экземпляров, после чего фабричный метод выдаст исключение / возвратит ноль.

Пример:

public class Foobar
{
    private static int numInstances = 0;

    public static Foobar CreateFoobar()
    {
        if (numInstances++ < 10)
        {
            return new Foobar();
        }

        return null;
    }

    protected Foobar()
    {
        ...
    }
}

Вышеупомянутый метод будет отлично работать для приложения с одним экземпляром, но для приложения с несколькими экземплярами вы, вероятно, захотите использовать семафор (реализация существует в System.Threading ), который предназначен именно для такого рода ситуаций (ограничение доступа к ресурсам / объектам). Это позволяет обойти проблему, состоящую в том, что несколько экземпляров класса запрашиваются почти одновременно, а проверка счетчика не выполняется.

8
ответ дан 3 December 2019 в 14:06
поделиться

Я бы создал статическое целое число и обновил бы его, когда вы создаете экземпляр нового объекта.

class YourClass
{
    static int Count = 0;

    public YourClass()
    {
       Count++;
       if(Count > 10)
       {
           //throw exception
       }
    }
}
0
ответ дан 3 December 2019 в 14:06
поделиться

принять статический счетчик в класс и выбросить исключение в конструкторе класса, если count> 10

0
ответ дан 3 December 2019 в 14:06
поделиться

Я считаю, что вам нужна какая-то форма многотонного шаблона ].

Многотонный шаблон - это вариант одноэлементного шаблона, но он позволяет использовать n экземпляров объекта. Подобно тому, как в одноэлементном классе есть статическая переменная для хранения одного экземпляра, многотонность часто реализуется с помощью статического массива или карты экземпляров, в зависимости от того, как вы хотите получить доступ к экземплярам - массивы допускают только числовой доступ, но с использованием карта,

10
ответ дан 3 December 2019 в 14:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: