Лучшая идея, чем синглтон, чтобы использовать для глобальной переменной - PullRequest
0 голосов
/ 23 февраля 2012

У меня есть очередь, которая должна использоваться некоторыми классами.

это одна и та же очередь для всех классов, поэтому я подумал, что, возможно, я помещу очередь в статический класс как статический член. Но я понимаю, что это не очень хороший ООП (хотя я думал, что синглтон является одним из шаблонов проектирования) поэтому я хотел бы идею для реализации этой очереди, Мне нужно, чтобы он был уникальным и доступным для всех классов, поскольку все классы используют одну и ту же очередь.

Ответы [ 2 ]

2 голосов
/ 23 февраля 2012

То, что вы говорите, это то, что ваши классы имеют некоторый контекст, и этот контекст содержит одну очередь. Можно сказать, что ваши занятия зависят от этого контекста.

Причина, по которой шаблон синглтона не является хорошей идеей, заключается в том, что он использует глобальный (статический) контекст в качестве общего контекста. Это ограничение по двум причинам:

  1. Нелегко четко определить зависимости ваших классов, и поэтому их нелегко настроить в различных средах (например, в среде модульного тестирования).

  2. Совершенно невозможно, чтобы два экземпляра этого контекста работали рядом.

Итак, простое решение - поместить все зависимости ваших классов в контекстный класс, а затем связать все ваши классы с экземпляром этого класса.

Другое, более продвинутое решение заключается в использовании инфраструктуры внедрения зависимостей.

1 голос
/ 23 февраля 2012

Я бы не сделал его синглтоном, так как он был бы виден всем классам и слоям в вашей программе.Дайте частям, которым необходим доступ к очереди, ссылку на саму очередь.Таким образом, вы четко определяете, какая часть вашего программного обеспечения имеет к нему доступ.

У меня был очень плохой опыт работы с программными проектами, в которых было слишком много синглетов, называемых "XyzManager", поскольку они использовались из любой части программногодикий путь.Старайтесь избегать глобальных переменных и синглетонов, если можете.Лучше указывайте в своих объектах ссылки на вещи, к которым они должны иметь доступ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...