давайте предположим, что у меня есть две идентичные услуги от двух провайдеров, и я хочу написать код, который вызывает одну из них в зависимости от запроса клиента.
Чтобы быть более понятным, у меня есть провайдер A и провайдерB. Клиент отправит запрос для A или B, поэтому я должен вызвать их классы для обработки запроса.
Я создал интерфейс провайдера
interface IProviderInterface
{
string GetRedirectUrl();
string GetStatus();
}
, затем каждый класс провайдерареализовал интерфейс
public class ProviderA: IProviderInterface
{
public ProviderA()
{
}
public string GetRedirectUrl()
{
return "URL for provider A";
}
public string GetStatus()
{
return "Check status with provider A API";
}
}
Теперь в классе диспетчера провайдеров я использовал инструкцию switch для вызова нужного класса провайдеров.
public class ProvidersManager
{
IProviderInterface ProviderObj;
public ProvidersManager(string ProviderName)
{
switch (ProviderName)
{
case "A":
ProviderObj = new ProviderA();
break;
case "B":
ProviderObj = new ProviderB();
break;
}
}
public string GetRedirectUrl()
{
return ProviderObj.GetRedirectUrl();
}
public string GetStatus()
{
return ProviderObj.GetStatus();
}
}
Но этот метод требует от меня редактирования диспетчера провайдеровКаждый раз, когда я добавляю нового провайдера в класс,
Мне было интересно, есть ли способ вызвать нужный класс более динамичным способом без изменения кода.