package com.bookshop.creational.simplefactory;
import java.math.BigDecimal;
/**
* The simple factory: the only place in the codebase that knows which concrete
* processor class backs each {@link PaymentMethod}.
*/
public final class PaymentProcessors {
private PaymentProcessors() {
}
public static PaymentProcessor forMethod(PaymentMethod method) {
return switch (method) {
case CARD -> new CardProcessor();
case PAYPAL -> new PayPalProcessor();
case GIFT_CARD -> new GiftCardProcessor();
};
}
private static final class CardProcessor implements PaymentProcessor {
@Override
public PaymentReceipt process(BigDecimal amount) {
return new PaymentReceipt("card", amount);
}
}
private static final class PayPalProcessor implements PaymentProcessor {
@Override
public PaymentReceipt process(BigDecimal amount) {
return new PaymentReceipt("paypal", amount);
}
}
private static final class GiftCardProcessor implements PaymentProcessor {
@Override
public PaymentReceipt process(BigDecimal amount) {
return new PaymentReceipt("gift-card", amount);
}
}
}