Что вы называете "синглтоном", который позволяет общедоступному конструктору дополнительные экземпляры? - PullRequest
3 голосов
/ 09 июня 2011

Я делаю класс, который поддерживает использование Singleton (доступен один экземпляр), но также поддерживает нормальное использование экземпляров (через открытый конструктор).

Если вы хотите только один, используйте этот,Если вы хотите 5, обновите их.

Я явно не могу назвать этот синглтон, иначе придет какой-то другой разработчик и сделает мой конструктор не публичным.Как я могу назвать это, чтобы указать, как это должно использоваться?Называть сложно.

Некоторые предположения для вашего развлечения: «Статически доступно»?"ThreadReady"?"SingletonOptional"?

Ответы [ 5 ]

3 голосов
/ 09 июня 2011

Похоже, у вас есть «экземпляр по умолчанию».Вы можете назвать свой объект по этим линиям.

1 голос
/ 09 июня 2011

Для меня это не похоже на синглтон, это звучит как обычный класс, у которого всегда есть хотя бы один экземпляр.Называть его одноэлементным и писать код, как если бы он был один (например, private static MySingleton instance = new MySingleton();), сбивает с толку - каким-то образом отделить «всегда присутствующий» экземпляр от определения вашего класса.Укажите в своей реализации, что это нормальный класс, который всегда имеет хотя бы 1 экземпляр.

1 голос
/ 09 июня 2011

Бассейн?

(особенно, если вы знаете, как насчет подсчета экземпляров раньше, но хотите инкапсулировать некоторые особенности построения / уничтожения)

1 голос
/ 09 июня 2011

Обычно точка синглтона для объекта, который имеет уникальный экземпляр. Если может существовать несколько копий класса, это означает, что «единство» не является обязательным поведением. Это так же, как и любой другой объект.

Вероятно, причина, по которой вы кодируете его как Singleton, заключается в глобальном доступе. Тогда просто назовите его глобальным объектом.

0 голосов
/ 09 июня 2011

Вы можете создать средство получения экземпляра по умолчанию.

private TheClass defaultInstance;
public Default{ get{ return defaultInstance??(defaultInstance = new TheClass());}
...