Но если "избегайте глобальных переменных!" средненькому программисту на C++ кто-то успел когда-то вбить в голову, то насчёт синглтонов, скорее всего, нет.
Какая наивность :) В первую-же неделю работы на новом месте пришлось править мозги сишной программе, и в ней ВСЕ переменные (ну разве что кроме парочки для циклов) оказались глобальными %)В ответ на возмущённый писк сказали, что программистка тренировалась на мэйнфреймах :)
Конкретный пример из личного опыта. Был написан SMS-сервер, поддерживающий архитектуру плагинов для различных операторов. Т.е. загрузив соответствующие плагины, можно было принимать и получать смс-ки операторов мобильной связи разных стран. Каждый плагин писался как DLL. При написании плагина для очередного оператора выяснилось, что они используют ту же библиотеку, что и уже подключенный, но в библиотека та реализована синглтоном, т.е. независимое использование библиотеки в одном процессе для двух операторов не предусмотрено. Пришлось реализовывать обмен данными между процессами, что было несложно, но существенно повлияло на быстродействие. Создатели той библиотеки наверняка думали, что создают синглтон не просто так.
Я неоднократоно сталкивался с тем, что синглтоны, как и глобальные переменные, очень любят разработчики, считающие себя чем-то большим, чем программистами. Они возводят многоэтажное здание, думая, что это центр города и все маршруты ведут туда. Когда их детище переносят на задворки, оно от обиды ломается :-)
Знаете ли, мне и изначальный сентимент и Ваше объяснение... Ну, это как мой начальник на прошлой работе заявил, посмотрев мой код, что, мол, "у нас в группе эксепциями и ассертами не пользуются". - "почему?" - спрашиваю, а он мне - "мы пришли к выводу, что, когда мы ими пользуемся, программа становится нестойкой и все время падает".
А причем здесь это? Вы, судя по всему, говорите о чьем-то неумении использовать exceptions. Мой пример - о неуместном использовании синглтонов. Которыми многие пользуются как глобальными переменными.
На моей практике был ОДИН случай, когда пришлось мучаться с singleton-ами (да еще и в template классе...) И всё. В остальных случаях избегал этой гадости... В частности из-за нечитабильности. Хотя по идее работать должно быстро, потому как в обход многих C++-тонелей.
(поеживаясь) А можно пример злоупотребления? То есть у меня они почти всегда есть, ну один-два. Типа database connection pool, или там logger, ну или ещё какой-нибудь другой pool.
Забавное: http://c2.com/cgi/wiki?SingletonPattern Creating a singleton representing the graphics card is a good example of this. Each machine is likely to have only one graphics card (that you're interested in), but you may want to support more than one card in your application.
Интересный пример, учитывая, что две видеокарты в одном компьютере сегодня явление может и не повседневное, но всеми нормальными операционками поддерживаемое.
Конечно. Но ими хоть как-то можно злоупотребить (помешать многониточности, например).
Хотя, наверное, и stateless-ами можно злоупотребить, хотя не так неприятно: можно сделать stateless singleton бутылочным горлышком (опять же помешать многониточности).
no subject
Date: 2005-03-01 06:29 pm (UTC)no subject
Date: 2005-03-01 06:37 pm (UTC)no subject
Date: 2005-03-01 06:42 pm (UTC)no subject
Date: 2005-03-01 06:44 pm (UTC)о! паттерны! и понёсся куда попало их пихать
потому что круто.
но это проходит.
no subject
Date: 2005-03-01 08:27 pm (UTC)no subject
Date: 2005-03-01 06:44 pm (UTC)no subject
Date: 2005-03-01 11:55 pm (UTC)no subject
Date: 2005-03-01 06:43 pm (UTC)no subject
Date: 2005-03-01 06:45 pm (UTC)no subject
Date: 2005-03-02 05:27 am (UTC)no subject
Date: 2005-03-01 07:31 pm (UTC)Я неоднократоно сталкивался с тем, что синглтоны, как и глобальные переменные, очень любят разработчики, считающие себя чем-то большим, чем программистами. Они возводят многоэтажное здание, думая, что это центр города и все маршруты ведут туда. Когда их детище переносят на задворки, оно от обиды ломается :-)
no subject
Date: 2005-03-01 10:43 pm (UTC)no subject
Date: 2005-03-02 02:57 am (UTC)no subject
Date: 2005-03-02 06:26 am (UTC)no subject
Date: 2005-03-02 06:17 pm (UTC)no subject
Date: 2005-03-02 05:01 am (UTC)no subject
Date: 2005-03-02 06:22 am (UTC)no subject
Date: 2005-03-01 08:27 pm (UTC)no subject
Date: 2005-03-01 06:50 pm (UTC)no subject
Date: 2005-03-01 06:53 pm (UTC)А можно пример злоупотребления?
То есть у меня они почти всегда есть, ну один-два. Типа database connection pool, или там logger, ну или ещё какой-нибудь другой pool.
Забавное: http://c2.com/cgi/wiki?SingletonPattern
Creating a singleton representing the graphics card is a good example of this. Each machine is likely to have only one graphics card (that you're interested in), but you may want to support more than one card in your application.
Интересный пример, учитывая, что две видеокарты в одном компьютере сегодня явление может и не повседневное, но всеми нормальными операционками поддерживаемое.
no subject
Date: 2005-03-01 06:54 pm (UTC)no subject
Date: 2005-03-01 07:11 pm (UTC)no subject
Date: 2005-03-01 07:29 pm (UTC)no subject
Date: 2005-03-01 07:32 pm (UTC)no subject
Date: 2005-03-01 07:50 pm (UTC)no subject
Date: 2005-03-01 10:25 pm (UTC)Вот настоящий ад.
no subject
Date: 2005-03-01 07:41 pm (UTC)no subject
Date: 2005-03-01 08:19 pm (UTC)no subject
Date: 2005-03-01 08:18 pm (UTC)no subject
Date: 2005-03-01 08:26 pm (UTC)no subject
Date: 2005-03-01 08:56 pm (UTC)no subject
Date: 2005-03-01 11:29 pm (UTC)(Впрочем, stateless и злоупотребить сложно.)
no subject
Date: 2005-03-01 11:35 pm (UTC)no subject
Date: 2005-03-01 11:50 pm (UTC)Хотя, наверное, и stateless-ами можно злоупотребить, хотя не так неприятно: можно сделать stateless singleton бутылочным горлышком (опять же помешать многониточности).
no subject
Date: 2005-03-02 03:01 am (UTC)