Предположим, у нас есть простая функция оплаты в интернет-магазине. Мы хотим управлять различными транзакциями с различными обработчиками транзакций:Как использовать фабрику для создания объектов, которые используют шаблон стратегии?
- Сделка может быть оплатой или возвратом.
- Процессором транзакций может быть Paypal или Payplug.
Итак, мы имеем следующие классы:
class PaymentTransaction implements Transaction {
}
class RefundTransaction implements Transaction {
}
class PaypalProcessor implements Processor {
}
class PayplugProcessor implements Processor {
}
Как было предложено в this answer, мы могли бы использовать следующий класс, который использует стратегию и полиморфизм.
class PaymentProcessor {
private Processor processor;
private Transaction transaction;
public PaymentProcessor(Processor processor, Transaction transaction) {
this.processor = processor;
this.transaction = transaction;
}
public void processPayment() {
processor.process(transaction);
}
}
Мы предполагаем, что процессор и транзакция будут использованы из базы данных. Интересно, как создать объект PaymentProcessor
.
Похоже, что абстрактный заводский класс только с одним методом по-прежнему действителен Abstract Factory pattern. Итак, в этом случае я задаюсь вопросом, применимо ли использование Abstract Factory.
- Если да, то как его реализовать?
- Если нет, следует ли использовать метод Factory Method с классом
PaymentProcessorFactory
для созданияPaymentProcessor
с его двумя атрибутами в соответствии с данными из базы данных?
Какая практика использования фабрики в этом случае?
Если я не ошибаюсь, это реализация шаблона _Factory Method_, верно? – Kwadz