diff --git a/strategy/src/main/java/org/patterns/BitcoinPayment.java b/strategy/src/main/java/org/patterns/BitcoinPayment.java new file mode 100644 index 0000000..5e5d0a6 --- /dev/null +++ b/strategy/src/main/java/org/patterns/BitcoinPayment.java @@ -0,0 +1,20 @@ +package org.patterns; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class BitcoinPayment implements PaymentStrategy { + + static Logger log = LoggerFactory.getLogger(BitcoinPayment.class); + + private final String wallet; + + public BitcoinPayment(String wallet) { + this.wallet = wallet; + } + + public void pay(double amount) { + log.info("Paid ${} using Bitcoin wallet: {}", amount, wallet); + } + +} diff --git a/strategy/src/main/java/org/patterns/CreditCardPayment.java b/strategy/src/main/java/org/patterns/CreditCardPayment.java new file mode 100644 index 0000000..58070db --- /dev/null +++ b/strategy/src/main/java/org/patterns/CreditCardPayment.java @@ -0,0 +1,20 @@ +package org.patterns; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class CreditCardPayment implements PaymentStrategy { + + static Logger log = LoggerFactory.getLogger(CreditCardPayment.class); + + private final String cardNumber; + + public CreditCardPayment(String cardNumber) { + this.cardNumber = cardNumber; + } + + public void pay(double amount) { + log.info("Paid ${} using Credit Card: {}", amount, cardNumber); + } + +} diff --git a/strategy/src/main/java/org/patterns/PayPalPayment.java b/strategy/src/main/java/org/patterns/PayPalPayment.java new file mode 100644 index 0000000..2572eaf --- /dev/null +++ b/strategy/src/main/java/org/patterns/PayPalPayment.java @@ -0,0 +1,20 @@ +package org.patterns; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class PayPalPayment implements PaymentStrategy { + + static Logger log = LoggerFactory.getLogger(PayPalPayment.class); + + private final String email; + + public PayPalPayment(String email) { + this.email = email; + } + + public void pay(double amount) { + log.info("Paid ${} using PayPal account: {}", amount, email); + } + +} diff --git a/strategy/src/main/java/org/patterns/PaymentContext.java b/strategy/src/main/java/org/patterns/PaymentContext.java new file mode 100644 index 0000000..d735261 --- /dev/null +++ b/strategy/src/main/java/org/patterns/PaymentContext.java @@ -0,0 +1,18 @@ +package org.patterns; + +public class PaymentContext { + + private PaymentStrategy strategy; + + public void setPaymentStrategy(PaymentStrategy strategy) { + this.strategy = strategy; + } + + public void checkout(double amount) { + if (strategy == null) { + throw new IllegalStateException("Payment strategy not set!"); + } + strategy.pay(amount); + } + +} diff --git a/strategy/src/main/java/org/patterns/PaymentStrategy.java b/strategy/src/main/java/org/patterns/PaymentStrategy.java new file mode 100644 index 0000000..5ae6d78 --- /dev/null +++ b/strategy/src/main/java/org/patterns/PaymentStrategy.java @@ -0,0 +1,7 @@ +package org.patterns; + +public interface PaymentStrategy { + + void pay(double amount); + +}