/**
 * {@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);
	}
}

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: