Как вынести похожие сущности в один абстрактный класс? Имеется сервис рассылки смс-сообщений. При отправке сообщений через его API, указывается параметр provider (с какого провайдера будут отправляться сообщения), как вы понимаете у каждого провайдера имеется свое API, методы соответственного у всех называются по разному (например где-то /send/sms,, где-то /sendsms или /send и т.д., /balance или /getbalance и т.д.)
Для каждого провайдера есть отдельный класс, с его методами, так вот вопрос, как сделать, что-то типа единого класса с методами (sendSms(), getBalance() и т.д.) через который будет выбираться класс провайдера. Надеюсь понятно написал :)

21 Авг 2019 в 07:02
198 +1
0
Ответы
1

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

public interface SmsProvider {
void sendSms(String message, String recipient);
int getBalance();
}

Затем для каждого провайдера создать отдельный класс, который реализует этот интерфейс:

public class Provider1 implements SmsProvider {
@Override
public void sendSms(String message, String recipient) {
// Логика отправки смс для провайдера 1
}
@Override
public int getBalance() {
// Логика получения баланса для провайдера 1
return 0;
}
}
public class Provider2 implements SmsProvider {
@Override
public void sendSms(String message, String recipient) {
// Логика отправки смс для провайдера 2
}
@Override
public int getBalance() {
// Логика получения баланса для провайдера 2
return 0;
}
}

Далее можно создать класс-фабрику, которая в зависимости от указанного провайдера будет возвращать соответствующий объект:

public class SmsProviderFactory {
public static SmsProvider createProvider(String provider) {
switch (provider) {
case "provider1":
return new Provider1();
case "provider2":
return new Provider2();
default:
throw new IllegalArgumentException("Unknown provider");
}
}
}

Теперь можно использовать класс-фабрику для создания объекта провайдера и вызова методов:

public class Main {
public static void main(String[] args) {
SmsProvider provider = SmsProviderFactory.createProvider("provider1");
provider.sendSms("Test message", "123456789");
int balance = provider.getBalance();
}
}

Таким образом, вам не нужно создавать отдельный класс с методами sendSms(), getBalance() для каждого провайдера, а можно использовать общий интерфейс или абстрактный класс и класс-фабрику для управления провайдерами.

20 Апр в 13:09
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 017 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир