Я хочу, чтобы пользователь выбирал различные способы оплаты. Поэтому у меня есть класс, описывающий способ оплаты.Как смоделировать различную информацию в объект?
public class PaymentMethod {
private int id;
private String name;
private String description;
//Constructors, Accessors...
}
Теперь у меня есть компонент, удерживающий выбор пользователя
public class OrderBean {
private List<PaymentMethod> availablePayments;
private PaymentMethod selectedPayment;
private PaymentInformation paymentInfo;
}
Мой вопрос, как лучшая модель в PaymentInformation
класс. Проблема, с которой я сталкиваюсь, заключается в том, что в зависимости от выбранного метода PaymentMethod информация для хранения в этом объекте может быть очень различной.
Например, для способа оплаты "кредитной карты", нам нужен
- номер кредитной карты
- код карты безопасности
- владелец
- дата истечения срока действия
Для оплаты по PayPal нам нужно (я действительно не знаю, просто чтобы понять).
- Адрес электронной почты
Для оплаты с помощью прямого дебета мы должны
- Владелец
- номер счета
- кредитное учреждение
Вот несколько решений я придумал до сих пор:
Дизайн трех различных классов. Пусть OrderBean
имеют три разные ссылки и проверяют, что правильная ссылка заполнена в соответствии с selectedPayment
.
Пусть эти три класса наследуют от общего базового класса или интерфейса и проверяют фактический тип одной ссылки, которая находится в OrderBean
.
Сделайте один класс для всех платежных данных вместе с полем PaymentMethod
и дайте классу проверить его элементы в соответствии с самим PaymentMethod
.
И я уверен, что могут быть и другие способы.
Так что же это лучший способ реализовать это?
Буду признателен, если какое-либо тело придумает лучший заголовок или более подходящие теги. –
Является ли ваш способ оплаты: CreditCard, paypall, ...? –
@TomJonckheere да –