Ответы обычно находятся в книгах Java.
клонирование: Если Вы не переопределяете метод клона, поведение по умолчанию является мелкой копией. Если Ваши объекты имеют только примитивные членские переменные, это полностью в порядке. Но на языке без типов с другим объектом как членские переменные, это - головная боль.
сериализация/десериализация
$new_object = unserialize(serialize($your_object))
Это достигает глубокой копии с большой стоимостью в зависимости от сложности объекта.
Сохранять статическую переменную с количеством созданных экземпляров. Увеличивайте это число с каждым построением объекта. Сделайте объект IDisposable и уменьшайте это число при каждом вызове Dispose (). Если вы хотите, чтобы он был потокобезопасным, используйте Interlocked.Increment () и Interlocked.Decrement (), чтобы изменить значение этой переменной вместо ++ и -.
Вам просто нужно будет использовать фабричный шаблон со счетчиком количества созданных экземпляров, после чего фабричный метод выдаст исключение / возвратит ноль.
Пример:
public class Foobar
{
private static int numInstances = 0;
public static Foobar CreateFoobar()
{
if (numInstances++ < 10)
{
return new Foobar();
}
return null;
}
protected Foobar()
{
...
}
}
Вышеупомянутый метод будет отлично работать для приложения с одним экземпляром, но для приложения с несколькими экземплярами вы, вероятно, захотите использовать семафор (реализация существует в System.Threading
), который предназначен именно для такого рода ситуаций (ограничение доступа к ресурсам / объектам). Это позволяет обойти проблему, состоящую в том, что несколько экземпляров класса запрашиваются почти одновременно, а проверка счетчика не выполняется.
Я бы создал статическое целое число и обновил бы его, когда вы создаете экземпляр нового объекта.
class YourClass
{
static int Count = 0;
public YourClass()
{
Count++;
if(Count > 10)
{
//throw exception
}
}
}
принять статический счетчик в класс и выбросить исключение в конструкторе класса, если count> 10
Я считаю, что вам нужна какая-то форма многотонного шаблона ].
Многотонный шаблон - это вариант одноэлементного шаблона, но он позволяет использовать n экземпляров объекта. Подобно тому, как в одноэлементном классе есть статическая переменная для хранения одного экземпляра, многотонность часто реализуется с помощью статического массива или карты экземпляров, в зависимости от того, как вы хотите получить доступ к экземплярам - массивы допускают только числовой доступ, но с использованием карта,