/**
* {@link <a href=
* "https://[Log in to view URL]"
* target= "_blank"></a>}
*
* @author itammb ( Italia Massimiliano Buscati )
* @version JDK 1.15
*
*/
class Main {
public interface PaymentStrategy {
void pay(double amount);
}
public static class CreditCardPaymentStrategy implements PaymentStrategy {
private String cardNumber;
private String expiryDate;
private String cvv;
public CreditCardPaymentStrategy(String cardNumber, String expiryDate, String cvv) {
this.cardNumber = cardNumber;
this.expiryDate = expiryDate;
this.cvv = cvv;
}
@Override
public void pay(double amount) {
System.out.println(toString());
System.out.println(amount + " paid with credit/debit card.");
}
@Override
public String toString() {
return "CreditCardPaymentStrategy [cardNumber=" + cardNumber + ", expiryDate=" + expiryDate + ", cvv=" + cvv
+ "]";
}
}
public static class PayPalPaymentStrategy implements PaymentStrategy {
private String email;
private String password;
public PayPalPaymentStrategy(String email, String password) {
this.email = email;
this.password = password;
}
@Override
public void pay(double amount) {
System.out.println(toString());
System.out.println(amount + " paid using PayPal.");
}
@Override
public String toString() {
return "PayPalPaymentStrategy [email=" + email + ", password=" + password + "]";
}
}
public static class ShoppingCartContext {
private PaymentStrategy paymentStrategy;
public void setPaymentStrategy(PaymentStrategy paymentStrategy) {
this.paymentStrategy = paymentStrategy;
}
public void checkout(double amount) {
paymentStrategy.pay(amount);
}
}
public static void main(String args[]) {
// Unit test - uso del design pattern: strategy
ShoppingCartContext cart = new ShoppingCartContext();
// Strategia: pago tramite la carta di credito
cart.setPaymentStrategy(new CreditCardPaymentStrategy("1234 5678 9012 3456", "12/24", "123"));
cart.checkout(100.0);
// Strategia: pago tramite PayPal
cart.setPaymentStrategy(new PayPalPaymentStrategy("example@example.com", "password"));
cart.checkout(200.0);
}
}
To embed this project on your website, copy the following code and paste it into your website's HTML: