Существует ли шаблон разработки для этого?

У меня есть компонент, который должен назвать определенный сервис в зависимости от входа, который он получает. Таким образом, мой компонент должен посмотреть на вход и на основе конфигурации, в которой говорится "для этого входного вызова, который этот сервис с этими данными" должен назвать надлежащим сервисом. Сервисы имеют общий метод подписи и определенный (каждый).

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

У Вас есть лучший подход к покрову этим сценарием?

7
задан Michael Dorgan 3 May 2010 в 18:00
поделиться

2 ответа

Заводской шаблон имеет следующее определение:

Определите интерфейс для создания объекта , но позвольте подклассам решать , какой класс создать. Заводской метод позволяет классу отложить создание экземпляра до подклассов

Похоже, вы хотите, не так ли?

6
ответ дан 7 December 2019 в 09:58
поделиться

Microsoft называет это The Provider Model Design Pattern. Хотя, поскольку ваши методы не реализуют все методы, возможно, он не очень подходит.

На самом базовом уровне паттерн представляет собой:

  • Абстрактный базовый класс, определяющий контракт. Абстрактный базовый класс имеет все абстрактные методы и свойства, необходимые для реализации публичного API, который он поддерживает.

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

Абстрактный базовый класс обычно должен поддерживать фабричные методы для создания новых объектов.

0
ответ дан 7 December 2019 в 09:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: