Здравствуйте, IB, Вы писали:
IB>Хорошее начало..
Рома, мне нравится твой энтузиазм, это оказывается GoF глупые, или ребята решили пошутить, ну или просто набросали код левой пяткой, а весь мир уже больше десяти лет думает, что синглтон выглядит именно так.. =)
Не извращай, я кажется, достаточно ясно сказал что между кодом в книге и кодов в приложении есть разница. У Кнута, например, описано 6 вариантов QuickSort'а, ты используешь один, если вообще используешь. Надо головой работать, а не тупо с книжки переписывать и всё получиться.
A>> Всякий нормальный программист отделяет задачу контроля количества копий и пишет нечто вроде
IB>Угу, ты все очень правильно написал. И знаешь как это называется? Правильно "фабрика". Знаешь в чем разница между синглтоном и фабрикой?
Фабрика генерирует разные реализации интерфейса, мой код, вообще говоря, — нет. Так что опять промазал.
IB>Экземпляр синглтона нельзя создать в обход фабричного метода, что достигается за счет внесения этого метода в создаваемый класс, со всеми вытекающими последствиями (нарушение SRP).
Э-э-э-э, ты опять перепутал особенности Java, и особенности синглтона. В Си++ чтобы синглтон нельзя было создать в обход фабричного метода ничего никуда заносить не надо. Нечего записывать в недостатки паттерна убогость/недоразвитость языка программиования, на котором он реализовывается.
IB>А все остальные хорошие? Как будем контролировать, что никто, из тех кто реализует синглтон не сделает его statefull, просто потому что так показалось удобнее и не просчитав последствий?
Никак не будем. У тебя есть другие решения (не синглтон) которые запросто делаются statefull?
IB>Речь-то именно о том, чем грозит использование (в том числе и не правильное) синглтона, а не описание как реализовать его правильно, если ты не заметил, так что не путай... =)
Чтобы сделать бяку никаких паттернов привлекать не надо. Если ты хочешь устроить соревнование "паттерн программирования с помошью которого клинический дурак наносит наименьший вред", то уволь. Мне лично интересно как умный и понимающий человек может неожиданно для себя запутаться.
IB>Как бы тебе так, по проще объяснить... Давай попробуем подняться на более высокий уровень абстракции, забыть про синглтоны и сформулировать одну аксиому: "Если одна сущность зависит от другой и эта зависимость не видна в публичном контракте — это плохо".
IB>Аксиома — это потому, что я не собираюсь доказывать тебе истинность данного утверждения. Дальше можешь продолжить эту мысль в применении к синглтонам.
Забавно. Вот, например, SQL сервер работает с файлами, но в публичном контракте ADO этого не видно. Обидно. Как же они так, а? А может твоя аксиома неправильная и детали реализации не должны торчать наружу?