Обычно используется широко используемый объект. Каковы различные шаблоны/модели/способы совместного использования объекта через приложение?
Одним из распространенных способов является использование одноэлементного рисунка. Однако я бы этого не избежал.
является определение «основного класса», затем установить переменный-член и простирающиеся все другие классы от этого «основного класса» хорошего способ
Абсолютно нет. Помимо всего прочего, если это переменная , она не будет «разделяться» с экземплярами ваших других классов. Это также полное злоупотребление наследованием, которое наверняка укусит вас в любом приложении значительного размера - ваши другие классы не будут логически иметь отношения наследования с вашим «основным» классом, не так ли? Как правило, наследование должно использоваться только тогда, когда оно действительно подходит, а не для быстрого исправления.
Какой у вас образец?
Зависимость впрыска. Когда приложение запускается, создайте все соответствующие объекты, которые должны знать друг о друге, и сообщите им (обычно в конструкторе) об их зависимостях. Несколько разных объектов могут зависеть от одного и того же объекта, если это подходит. Вы можете использовать один из доступных футляров для инъекций зависимостей.
Dependency инъекции обычно работает лучше, чем при использовании одиночек, потому что:
- Класс сам не знает зависимость, является ли или не фактически совместно; зачем ему это нужно?
- Глобальное состояние упрощает модульное тестирование
- Каждый класс упрощает свои зависимости при их объявлении - тогда легче ориентироваться в приложении и видеть, как классы связаны друг с другом.
Singletons и глобальные заводы более подходит, когда они для таких вещей, как лесозаготовки - но даже тогда, это означает, что это достаточно сложно проверить лесозаготовительных аспекты класса. Гораздо проще создать зависимость, которая делает то, что вам нужно, и передать это тестируемому объекту, чем добавлять способы взаимодействия с одним синглом (который обычно остается «фиксированным» после инициализации).
Мне любопытно, почему следует избегать одноэлементного шаблона –
@KshitijMehta: Просто добавили это - в основном для проверки. –
Есть ли случай, когда вы используете шаблон singleton? Как бы вы оценили дополнительные усилия, необходимые для включения рамки DI в свой проект? –