По определению singleton гарантирует существование единственного экземпляра определенного класса и предоставляет глобальную точку доступа к этому экземпляру. Того же можно добится используя в классе статические переменные и функции. Получается, что необходимость в синглтоне отпадает. Я что то упустил?
Hello, Варвар!
В> По определению singleton гарантирует существование единственного В> экземпляра определенного класса и предоставляет глобальную точку доступа В> к этому экземпляру. Того же можно добится используя в классе статические В> переменные и функции. Получается, что необходимость в синглтоне В> отпадает. Я что то упустил?
G> Hello, Варвар!
В>> По определению singleton гарантирует существование единственного В>> экземпляра определенного класса и предоставляет глобальную точку В>> доступа к этому экземпляру. Того же можно добится используя в классе В>> статические переменные и функции. Получается, что необходимость в В>> синглтоне отпадает. Я что то упустил?
G> Баян G> http://www.rsdn.ru/forum/?mid=1006572
Здравствуйте, GarryIV, Вы писали:
G>> Hello, Варвар!
В>>> По определению singleton гарантирует существование единственного В>>> экземпляра определенного класса и предоставляет глобальную точку В>>> доступа к этому экземпляру. Того же можно добится используя в классе В>>> статические переменные и функции. Получается, что необходимость в В>>> синглтоне отпадает. Я что то упустил?
G>> Баян G>> http://www.rsdn.ru/forum/?mid=1006572
Здравствуйте, Варвар, Вы писали:
В>По определению singleton гарантирует существование единственного экземпляра определенного класса и предоставляет глобальную точку доступа к этому экземпляру. Того же можно добится используя в классе статические переменные и функции. Получается, что необходимость в синглтоне отпадает. Я что то упустил?
Singleton — понятие Net Remoting или паттерн. Статические переменные и функции — понятия языка реализации. И каким образом ты их хочешь сравнивать?
С уважением, Gleb.
Re: Singleton vs. Static functions
От:
Аноним
Дата:
08.02.05 09:30
Оценка:
Здравствуйте, Варвар, Вы писали:
В>По определению singleton гарантирует существование единственного экземпляра определенного класса и предоставляет глобальную точку доступа к этому экземпляру. Того же можно добится используя в классе статические переменные и функции. Получается, что необходимость в синглтоне отпадает. Я что то упустил?
Ага, пару мелочей .
1. В достаточно большом приложении таких одиночек может оказаться много, и они могут взаимодействовать между собой. В случае использования статических конструкторов ты не можешь управлять порядком их инициализации. Порядком инициализации одиночек управлять не надо. Проблемы просто нет.
2. Например, у меня есть синглтон — инкапсуляция соединения с БД. Казалось, что на всё приложение оно одно, но оказалось, что в паре мест (импорт данных, к примеру) это не так. Функционал этого класса использовать хотелось. Даже очень Добавил к нему метод get_ExclusiveInstance, и всё решилось. Со static так не получилось бы. Мелочь, а приятно
Здравствуйте, GlebZ, Вы писали:
GZ>Здравствуйте, Варвар, Вы писали:
В>>По определению singleton гарантирует существование единственного экземпляра определенного класса и предоставляет глобальную точку доступа к этому экземпляру. Того же можно добится используя в классе статические переменные и функции. Получается, что необходимость в синглтоне отпадает. Я что то упустил?
GZ>Singleton — понятие Net Remoting или паттерн. Статические переменные и функции — понятия языка реализации. И каким образом ты их хочешь сравнивать?
GZ>С уважением, Gleb.
Я хочу сравнить два различных варианта решения проблемы доступа к одному и тому же набору данных из любого места в программе. Возможные варианты — это применение класса использующего паттерн сингелтон, или применение класса использующего статические методы.
Здравствуйте, Аноним, Вы писали:
А>1. В достаточно большом приложении таких одиночек может оказаться много, и они могут взаимодействовать между собой. В случае использования статических конструкторов ты не можешь управлять порядком их инициализации. Порядком инициализации одиночек управлять не надо. Проблемы просто нет.
Большое кол-во одиночек — проблема в дизайне. Разгребаю как раз такое приложение. 80% классов синглтоны. Возможность их повторного использования — 0. Все завязаны друг на друге. Лучше чтоб они были обычными классами и для каждого конкретного приложения писалась обертка создающая единственный екземпляр необходимых классов в нужном порядке, а затем предоставляющая доступ к этим екземплярам.
GZ>>Singleton — понятие Net Remoting или паттерн. Статические переменные и функции — понятия языка реализации. И каким образом ты их хочешь сравнивать?
GZ>>С уважением, Gleb. В>Я хочу сравнить два различных варианта решения проблемы доступа к одному и тому же набору данных из любого места в программе. Возможные варианты — это применение класса использующего паттерн сингелтон, или применение класса использующего статические методы.
Проясняю, если у тебя функциональность тянет на некоторую инкапсулированную сущность, создавай синглтон объект(который создается не без помощи статических функций). Если не тянет или функциональность инкапсулирована в нормальный класс, то статическая переменная или лучше функция. Никакого противопоставления здесь нет, это разная гранулярность. Пользуйся тем, что тебе на данный момент удобно.
С уважением, Gleb.
PS: Синглтоны не люблю. Пользуюсь редко, только когда надо. Так как я человек ленивый, а работать приходится в многопоточных приложениях, то обычно создаю по инстансу на каждый поток. А то приходится писать синхронизацию и мучительно отлаживаться.
В>если у тебя функциональность тянет на некоторую инкапсулированную сущность
В>А по русски? Извини не понял.
В>С точки зрения инкапсуляции есть какая то разница между В>
В>MyClass.Instance.MyFunc();
В>
и В>
В>MyClass.MyFunc();
В>
Теперь я уже не понял.
Синглтон — это объект который существует в единственном экземпляре. Все остальное уже особенности реализации.
public class MyClass
{
public static MyClass myclass; //статический инстансpublic DoSomething(){};
.....
}
public class MyClass
{
private MyClass myclass;
public static DoSomething(){myclass.DoSomthing();}; //статическая функция
}
Это все является реализациями синглтонов.
public class MyClass
{
private int i;
private static int j;
........
}
MyClass myclass=new MyClass();
Уже не является синглтоном. Хотя содержит статическую переменную — которая одинакова для всех созданных классов.
С уважением, Gleb.
Re[3]: Singleton vs. Static functions
От:
Аноним
Дата:
09.02.05 13:52
Оценка:
Здравствуйте, Варвар, Вы писали:
В>Большое кол-во одиночек — проблема в дизайне. Разгребаю как раз такое приложение. 80% классов синглтоны. Возможность их повторного использования — 0. Все завязаны друг на друге. Лучше чтоб они были обычными классами и для каждого конкретного приложения писалась обертка создающая единственный екземпляр необходимых классов в нужном порядке, а затем предоставляющая доступ к этим екземплярам.
И при изменениях в структуре синглтонов каждый раз переписывать все обёртки для всех приложений? Не то чтобы это так уж трудно, но во-первых скучно, а во-вторых, если их больше 10, я лично хоть какую-нибудь одну, но забуду
80% классов — одиночек это какое-то странное приложение трудно что-то представить.. я больше ~30 таких (либо сделанных как синглтоны, либо которых использовали как ты говоришь надо) ни в одном приложении не видел..
GZ>PS: Синглтоны не люблю. Пользуюсь редко, только когда надо. Так как я человек ленивый, а работать приходится в многопоточных приложениях, то обычно создаю по инстансу на каждый поток. А то приходится писать синхронизацию и мучительно отлаживаться.
Как сделать "глобальные" поля на уровне потока ?
И что значит "инстанс"?
Здравствуйте, TechnoMen, Вы писали:
TM>Как сделать "глобальные" поля на уровне потока ?
А так ли уж часто они нужны? Они нужны в строго определенных местах. Такие места легко локализовать, синхронизировать и протестировать на многопоточнось. TM>И что значит "инстанс"?
Экземпляр класса.