Класс Singleton против класса со статическим членом
Несмотря на множество тем в этой теме, я до сих пор неясно, когда выбирать, какой подход.
Я надеюсь, что, обсудив конкретный пример, я, наконец, "получу".
Примечание. Мой язык здесь Cocoa, хотя общая проблема не зависит от языка.
У меня есть класс TaskQueue, который я хочу использовать для:
- доступ из любого места в моем коде для добавления или удаления запланированных задач
- автоматически выполняет запланированные задания с регулярными интервалами.
Когда TaskQueue впервые используется, я хочу, чтобы TaskQueue инициировал поток, который затем просыпался с регулярными интервалами для обработки задач.
Очевидно, мне понадобится минимум две переменные:
- массив для хранения задач
- экземпляр потока, обрабатывающего задачи
Поскольку для обработки этих задач требуется только одна очередь задач и один поток, у меня есть два варианта:
Существует ли один подход, который лучше, чем другой в этом конкретном случае? Если да, то почему?
Ответы
Ответ 1
Основные отличия - это простые вещи, такие как:
- с помощью singleton вы можете обойти объект для делегатов и обратных вызовов
- с помощью singleton вы можете реализовать интерфейсы и получить его
- с помощью singleton вы можете использовать шаблон factory для создания своего экземпляра
Если вам не нужны какие-либо из них, как и для глобальной функциональности, к которой необходимо получить доступ ко всему вашему коду, вы можете использовать статические методы.
Я лично предпочитаю использовать статические методы, если у меня нет явной причины использовать экземпляр singleton (например, имеющий общий интерфейс, но различные реализации).
Помните тот факт, что рефакторинг статических методов для одноэлементного экземпляра - довольно простой процесс, поэтому, если вы когда-либо найдете необходимость в последнем, вы легко его реорганизуете (тогда у вас есть препроцессор C, один #define
будет почти достаточно).