Да.. Я знаю.. Я - простак.. Таким образом, что такое Singleton?

Я могу думать только о каком-то обходном пути, например:

% Input: A = coordinates, b = functional values.
A = rand(20, 3);
b = ceil(rand(20, 1) * 4);

% Color map.
cm = [0 1 0; 0 0 1; 0 1 1; 1 0 0];

% Circle size.
cs = 21;

% 3D scatter plot.
figure(1);
hold on;
for k = 1:size(cm, 1)
  idx = (b == k);
  scatter3(A(idx, 1), A(idx, 2), A(idx, 3), cs, cm(k, :), 'filled');
end
hold off;
view(45, 30);
grid on;

Дает следующий результат:

Output [115 ]

28
задан 14 revs, 2 users 77% 23 May 2017 в 11:45
поделиться

8 ответов

Согласно просьбе вот несколько аналогий:

  • Земля
  • Вселенная
  • Кислород элемента (существуют другие элементы, но только один кислород. Существует много кислородных молекул, но только один канонический кислородный элемент.)
  • Понятие Истинных
  • Понятие Лжи

Вы могли инстанцировать большого количества Истинных объектов, но они все обратятся к тому же фактическому объекту (т.е. универсальное понятие Истинных). В зависимости от домена Вашего приложения могут быть более определенные примеры:

  • Соединение с базой данных
  • Основной поток приложения
  • Что-либо, что представляет устройство (т.е. Вы только хотите инстанцировать одного объекта, представляющего CPU0).
67
ответ дан runako 28 November 2019 в 02:16
поделиться

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

Вот ссылка, которая могла бы помочь (покрытия, как сделать Ваш одиночный элемент ориентированным на многопотоковое исполнение в c# также):

Реализация шаблона "одиночка" в C#

18
ответ дан Justin Niessner 28 November 2019 в 02:16
поделиться

Одиночный элемент является классом, которому можно было только создать единственный экземпляр.

Это часто реализуется при наличии частного конструктора, который присвоен статической переменной и затем доступный через открытый метод.

Существуют некоторые проблемы с использованием одиночных элементов, включая:

  • Они делают тестирование трудным
  • Они не могут быть разделены на подклассы
  • После того, как инстанцированный, экземпляр будет жить навсегда

Посмотрите здесь для дальнейшего описания одиночного элемента и другого шаблона 'Моносостояние', которое могло бы быть полезно вместо этого: http://www.objectmentor.com/resources/articles/SingletonAndMonostate.pdf

1
ответ дан John Topley 28 November 2019 в 02:16
поделиться

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

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

Вот некоторая информация о том, где использовать одиночные элементы: http://www.ibm.com/developerworks/webservices/library/co-single.html

От статьи, упомянутой ранее:

Чтобы решить, является ли класс действительно одиночным элементом, необходимо задать себе некоторые вопросы.

  • Каждое приложение будет использовать этот класс точно тот же путь? (точно ключевое слово),
  • Для каждого приложения будет когда-либо нужен только один экземпляр этого класса?
    (когда-либо и каждый - ключевые слова),
  • Если клиенты этого класса не знают о приложении, они
    часть?

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

13
ответ дан John Topley 28 November 2019 в 02:16
поделиться

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

0
ответ дан Peter 28 November 2019 в 02:16
поделиться

A singleton is a global variable in sheep's clothing :)

http://googletesting.blogspot.com/2008/08/root-cause-of-singletons.html

13
ответ дан 28 November 2019 в 02:16
поделиться

Синглтон иногда может быть не таким одиноким. Посмотрите здесь: Когда синглтон не является синглтоном? , статья предоставлена ​​Sun.

Одна рекомендация: не используйте его. Это просто нехорошо, может создать серьезные узкие места в производительности вашего приложения, и усилия по тестированию одноэлементных классов просто не стоят этого.

Из вышеупомянутой статьи в Википедии:

Следует отметить, что этот шаблон делает модульное тестирование гораздо сложнее, так как он вводит глобальное состояние в приложение.

Еще один ресурс, на который стоит обратить внимание - это этот пост в блоге по тестированию Google.

0
ответ дан 28 November 2019 в 02:16
поделиться

Был замечательный доклад Google Tech Talk, в котором докладчик рассказал о глобальном состоянии (включая синглтоны) и о том, почему они делают тестирование практически невозможным:

Беседы о чистом коде - «Глобальное состояние и синглтоны»

Говорящий делает различие между тем, что он называет синглетонами (заглавная буква «S»), где предпринимаются шаги для предотвращения создания экземпляров класса более одного раза (то есть часто с помощью статического getInstance метод и частные конструкторы) и одиночные экземпляры (маленькие «s»), где единственный экземпляр - это все, что когда-либо требовалось, но в класс ничего не встроено, чтобы предотвратить создание нескольких экземпляров.

0
ответ дан 28 November 2019 в 02:16
поделиться
Другие вопросы по тегам:

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