о синглтоне

Ну, я читал, что синглтоны плохи, потому что они против паттернов. Я также читал, что главной причиной этого является глобальная ссылка на синглтон, так или иначе:

Всегда ли можно избежать синглтона?

Если да, скажем, например, я получил сеть IOCP, и мне нужно ее инициализировать один раз, и этот объект должен быть постоянным на протяжении всего срока службы программного обеспечения. То же самое происходит с классом, который я назвал «рисовать», где я печатаю данные на экран.
Если бы я не сделал из этого ни одного тона, мне все равно понадобилась бы глобальная переменная текущего Hwnd и для локальной инициализации объекта каждый раз, когда я собираюсь его использовать (это действительно раздражает).

Таким образом, использование синглтона — признак того, что мой дизайн является недостатком?
Что я могу сделать, чтобы избежать их?

Благодарю.

2

Решение

Всегда ли можно избежать синглтона?

Да, используйте глобальную переменную или (что еще лучше) исправьте свой дизайн. Один из вариантов исправить дизайн — это использовать инверсия контроля.

Если вы попытаетесь использовать ОО принципы, вы увидите, что можете обойтись без синглтона.

5

Другие решения

Вопрос в том, какие сущности нуждаются в доступе к ресурсу, который может быть создан только один раз, и когда (впредь называется ресурсом).

Если объекты, которым требуется доступ к этому ресурсу, могут быть созданы с помощью этого ресурса (IOC, внедрение зависимостей), то это лучший путь, таким образом сохраняя простоту и избегая создания Singleton. ПОЦЕЛУЙ.

Если по какой-то причине существуют сущности, которым нужен доступ к ресурсу, но которые не могут быть созданы с его помощью, то должна быть реализована альтернатива. Одним из вариантов является Singleton, но другим вариантом, который мне нравится использовать, является Factory. Это полностью инкапсулирует создание ресурса и является гораздо более ориентированным на будущее, что означает, что если в будущем по какой-либо причине может быть создан более одного экземпляра ресурса, то все его инкапсулируется. Вы не можете / не должны пытаться сделать это с помощью Singleton. Конечно, внутренне фабрика будет поддерживать уникальный экземпляр ресурса.

Есть те, которые утверждают, что если объект не может быть создан с помощью ресурса, то дизайн плохой. С этим можно поспорить, и, вероятно, это следует делать в каждом конкретном случае.

0

По вопросам рекламы [email protected]