import io.github.pukkertje.peninsula.annotations.*;
public interface PaymentStrategy {
void pay(int amount);
}
@Strategy
public class PayPalPayment implements PaymentStrategy {
private final String username;
private final String password;
@Inject
public PayPalPayment(@Config("paypal.username") String username, @Config("paypal.password") String password) {
this.username = username;
this.password = password;
}
public void pay(int amount) {
}
}
@Strategy
public class CreditCardPayment implements PaymentStrategy {
private final String cardNumber;
private final String cvv;
@Inject
public CreditCardPayment(@Config("creditcard.number") String cardNumber, @Config("creditcard.cvv") String cvv) {
this.cardNumber = cardNumber;
this.cvv = cvv;
}
public void pay(int amount) {
}
}
@Component
public class PaymentService {
private final PaymentStrategy paymentStrategy;
@Inject
public PaymentService(PaymentStrategy paymentStrategy) {
this.paymentStrategy = paymentStrategy;
}
public void processPayment(int amount) {
paymentStrategy.pay(amount);
}
}