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