Обсуждение:Одиночка (шаблон проектирования)

Последнее сообщение: 8 лет назад от 86.57.244.10 в теме «Первый пример на Java»
Пожалуйста, добавляйте новые темы снизу

Без названия править

Мне кажется, можно добавить в минусы сложность модульного тестирования приложений, использующих Одиночки. Как альтернативу, можно использовать паттерн Реестр.

Примеры Singleton на C# устарели. Надо делать через Lazy<T> 194.8.164.162 10:43, 15 ноября 2010 (UTC)Ответить

Борг править

Пример на питоне очень напоминает борг. С питоном почти не работал, но если разберусь, то поправлю. А пока стоит обратить внимание и либо поправить, либо добавить информацию о борге, как об очень похожем, но отличающемся паттерне. said 10:31, 9 декабря 2010 (UTC)Ответить

Приватная переменная инициализируется вне класса. Зачем?Неясно. править

class OnlyOne
{
public:
	static OnlyOne* Instance()
	{
		if(theSingleInstance==0)
			theSingleInstance=new OnlyOne;
		return theSingleInstance;
	}
private:
	static OnlyOne* theSingleInstance;
	OnlyOne(){};
};
OnlyOne* OnlyOne::theSingleInstance=0;

Усулгурт 18:54, 2 мая 2011 (UTC)Ответить

Потому что она статическая, хоть бы скомпилировать попробовал. --DGuselnikov 06:24, 3 сентября 2011 (UTC)Ответить

Сообщение с ВП:СОО править

Пример на Java 1.5: с отложенной инициализацией является неправильным.

Книга "Java. Эффективное программирование", Дж. Блох, 2012. Изд. "Лори" с 180 - 181

Правильный пример: с.181

Автор сообщения: Доброжелатель:) 86.57.255.94 08:52, 9 октября 2012 (UTC)Ответить

Перенесено со страницы ВП:СО. --IGW 18:33, 28 декабря 2012 (UTC)

Первый пример на Java править

Не понимаю, зачем нужна переменная localInstance? Не проще ли так написать:

public class Singleton {
    private static volatile Singleton instance;

    private Singleton() {}
    
    public static Singleton getInstance() {
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}

86.57.244.10 10:23, 5 февраля 2016 (UTC)Ответить