2

Я немного запутался в шаблоне проектирования Service Locator.Шаблон локатора обслуживания - как бороться с более чем одной реализацией одного и того же сервисного интерфейса

Это очень простой вопрос относительно этого шаблона, но я не мог понять: что делать, если у меня есть несколько классов, реализующих некоторый интерфейс IServiceX? Как локатор разрешит, какой экземпляр я ищу?

Например, я мог бы зарегистрироваться:

ServiceA реализации IServiceX ServiceB реализующий IServiceX

кажется вполне возможным, но я не уверен. Предположим, у меня есть два типа службы обмена сообщениями (тот же сервисный интерфейс), и я хочу использовать обе реализации во время выполнения. Как локатор будет выбирать между этими различными реализациями?

ответ

1

Это забавная часть. Это зависит от вас, чтобы решить.

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

Возможно, у вас есть метод Factory, который всегда подходит для конкретной реализации.

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

Это все зависит от вас!

+0

Замечательно знать это! Несмотря на то, что наиболее распространенное использование, которое я видел, это реализация 1: 1 (в примерах и учебниках). – natenho

Смежные вопросы