Я могу думать только о каком-то обходном пути, например:
% 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;
Дает следующий результат:
Согласно просьбе вот несколько аналогий:
Вы могли инстанцировать большого количества Истинных объектов, но они все обратятся к тому же фактическому объекту (т.е. универсальное понятие Истинных). В зависимости от домена Вашего приложения могут быть более определенные примеры:
Одиночный элемент является классом, которого может быть только один экземпляр в Вашем приложении. Вы затем совместно используете тот экземпляр всюду по своему приложению.
Вот ссылка, которая могла бы помочь (покрытия, как сделать Ваш одиночный элемент ориентированным на многопотоковое исполнение в c# также):
Одиночный элемент является классом, которому можно было только создать единственный экземпляр.
Это часто реализуется при наличии частного конструктора, который присвоен статической переменной и затем доступный через открытый метод.
Существуют некоторые проблемы с использованием одиночных элементов, включая:
Посмотрите здесь для дальнейшего описания одиночного элемента и другого шаблона 'Моносостояние', которое могло бы быть полезно вместо этого: http://www.objectmentor.com/resources/articles/SingletonAndMonostate.pdf
Singleton полезна, когда необходимо быть уверены, что существует один и только один экземпляр класса, и что к этому объекту нужно получить доступ от нескольких местоположений в коде.
Если это могло бы иметь смысл, что больше чем один экземпляр Вашего класса мог использоваться сразу, то Вы не хотите одиночный элемент.
Вот некоторая информация о том, где использовать одиночные элементы: http://www.ibm.com/developerworks/webservices/library/co-single.html
От статьи, упомянутой ранее:
Чтобы решить, является ли класс действительно одиночным элементом, необходимо задать себе некоторые вопросы.
- Каждое приложение будет использовать этот класс точно тот же путь? (точно ключевое слово),
- Для каждого приложения будет когда-либо нужен только один экземпляр этого класса?
(когда-либо и каждый - ключевые слова),Если клиенты этого класса не знают о приложении, они
часть?Если Вы отвечаете на да на все три вопроса, то Вы нашли одиночный элемент. Ключевые пункты здесь - то, что класс является только одиночным элементом, если все приложения рассматривают его точно то же и если его клиенты могут использовать класс без контекста приложения.
Помимо его места как конкретный шаблон разработки, одиночные элементы могут также думаться как просто одна вещь. Его использование в программировании несомненно происходит из его использования в математике, где одиночный элемент является рядом всего одного числа.
A singleton is a global variable in sheep's clothing :)
http://googletesting.blogspot.com/2008/08/root-cause-of-singletons.html
Синглтон иногда может быть не таким одиноким. Посмотрите здесь: Когда синглтон не является синглтоном? , статья предоставлена Sun.
Одна рекомендация: не используйте его. Это просто нехорошо, может создать серьезные узкие места в производительности вашего приложения, и усилия по тестированию одноэлементных классов просто не стоят этого.
Из вышеупомянутой статьи в Википедии:
Следует отметить, что этот шаблон делает модульное тестирование гораздо сложнее, так как он вводит глобальное состояние в приложение.
Еще один ресурс, на который стоит обратить внимание - это этот пост в блоге по тестированию Google.
Был замечательный доклад Google Tech Talk, в котором докладчик рассказал о глобальном состоянии (включая синглтоны) и о том, почему они делают тестирование практически невозможным:
Беседы о чистом коде - «Глобальное состояние и синглтоны»
Говорящий делает различие между тем, что он называет синглетонами (заглавная буква «S»), где предпринимаются шаги для предотвращения создания экземпляров класса более одного раза (то есть часто с помощью статического getInstance
метод и частные конструкторы) и одиночные экземпляры (маленькие «s»), где единственный экземпляр - это все, что когда-либо требовалось, но в класс ничего не встроено, чтобы предотвратить создание нескольких экземпляров.