Точка ноль
Не прибегайте к синглетам, и особенно не в многопоточных контекстах. Вы можете искать этот сайт, если вам нужны объяснения (подсказка: причины против них очень похожи в ОО-языках, подобных ObjC. Например, C ++, Java, C # ...).
Поделиться или нет?
Это в конечном итоге зависит от поведения вашего проекта необходимо , но я предпочитаю вариант № 1 по умолчанию.
- Если вам нужно несколько экземпляров, не бойтесь создавать несколько (если у вас нет действительно, действительно, очень веских причин не делать этого).
- Если их сложно построить, подумайте, какими неизменными данными они могут поделиться.
- Пользуйтесь маленькими специализированными предметами (
WebServices
может быть огромным). Меньшие объекты обеспечивают большую гибкость и снижают вероятность того, что ваша программа будет конкурировать за ресурсы.
- Что вы получите в этом случае, поделившись? Зачастую это просто увеличивает время выполнения и сложность реализации ... но при этом может принести выгоды. Не идентифицируя эти выгоды, вы должны придерживаться нескольких экземпляров, чтобы уменьшить сложность.
- Несколько экземпляров позволяют вашей программе выполнять несколько асинхронных запросов в зависимости от того, что им нужно. Многократные асинхронные запросы хороши (но, очевидно, они будут медленными, если у вас слишком много активных запросов).
- Большинство программ более логичны и просты в обслуживании, когда объекты, от которых они зависят, допускают несколько экземпляров (они не требуют совместного использования).
Предположите несколько экземпляров (1), пока не обнаружите проблему. Даже после того, как проблема обнаружена, вы обычно можете не делиться информацией.
Чтобы определить, что потребляет меньше памяти, требуется гораздо больше информации. Если объекты, которые вы рассматриваете для совместного использования, невелики (очень маловероятно), сами по себе они не являются проблемами с потреблением памяти.
Любой из предложенных подходов может привести к большему потреблению памяти - он полностью зависит от контекста и исполнения. Нам понадобится дополнительная информация, чтобы конкретно ответить на этот вопрос.
Это не означает, что совместное использование является плохим, но совместное использование обычно усложняет ситуацию, потому что вам необходимо спроектировать объекты так, чтобы они вели себя предсказуемо при совместном использовании (особенно если вы работаете в многопоточном контексте).
Задайте себе вопрос:
- Какую значительную (ые) выгоду (а) предоставил бы
WebServices
?
- Как совместное использование
WebServices
улучшит вашу программу и уменьшит сложность?
Скорее всего, карта WebServices
не взаимодействует с аудио. В этом случае WebServices
может быть хорошим кандидатом для базового класса, где аудио и картографические сервисы являются отдельными подклассами (при условии, что класс WebServices
уже сложен).