diff --git a/src/statepattern/Client.java b/src/behavior/statepattern/Client.java similarity index 90% rename from src/statepattern/Client.java rename to src/behavior/statepattern/Client.java index 0c9344c..7a4fb0c 100644 --- a/src/statepattern/Client.java +++ b/src/behavior/statepattern/Client.java @@ -1,4 +1,4 @@ -package statepattern; +package behavior.statepattern; public class Client { public static void main(String[] args) { diff --git a/src/statepattern/LaptopContext.java b/src/behavior/statepattern/LaptopContext.java similarity index 75% rename from src/statepattern/LaptopContext.java rename to src/behavior/statepattern/LaptopContext.java index 33d87fd..40c2d99 100644 --- a/src/statepattern/LaptopContext.java +++ b/src/behavior/statepattern/LaptopContext.java @@ -1,8 +1,8 @@ -package statepattern; +package behavior.statepattern; -import statepattern.state.OffState; -import statepattern.state.PowerState; -import statepattern.state.SavingState; +import behavior.statepattern.state.OffState; +import behavior.statepattern.state.PowerState; +import behavior.statepattern.state.SavingState; public class LaptopContext { private PowerState powerState; diff --git a/src/statepattern/state/OffState.java b/src/behavior/statepattern/state/OffState.java similarity index 82% rename from src/statepattern/state/OffState.java rename to src/behavior/statepattern/state/OffState.java index 31be078..508220b 100644 --- a/src/statepattern/state/OffState.java +++ b/src/behavior/statepattern/state/OffState.java @@ -1,6 +1,6 @@ -package statepattern.state; +package behavior.statepattern.state; -import statepattern.LaptopContext; +import behavior.statepattern.LaptopContext; public class OffState implements PowerState{ diff --git a/src/statepattern/state/OnState.java b/src/behavior/statepattern/state/OnState.java similarity index 82% rename from src/statepattern/state/OnState.java rename to src/behavior/statepattern/state/OnState.java index dcc66a0..331af5a 100644 --- a/src/statepattern/state/OnState.java +++ b/src/behavior/statepattern/state/OnState.java @@ -1,6 +1,6 @@ -package statepattern.state; +package behavior.statepattern.state; -import statepattern.LaptopContext; +import behavior.statepattern.LaptopContext; public class OnState implements PowerState{ diff --git a/src/behavior/statepattern/state/PowerState.java b/src/behavior/statepattern/state/PowerState.java new file mode 100644 index 0000000..7394b37 --- /dev/null +++ b/src/behavior/statepattern/state/PowerState.java @@ -0,0 +1,7 @@ +package behavior.statepattern.state; + +import behavior.statepattern.LaptopContext; + +public interface PowerState { + void pushPowerButton(LaptopContext context); +} diff --git a/src/statepattern/state/SavingState.java b/src/behavior/statepattern/state/SavingState.java similarity index 83% rename from src/statepattern/state/SavingState.java rename to src/behavior/statepattern/state/SavingState.java index e5316b6..b9bfc55 100644 --- a/src/statepattern/state/SavingState.java +++ b/src/behavior/statepattern/state/SavingState.java @@ -1,6 +1,6 @@ -package statepattern.state; +package behavior.statepattern.state; -import statepattern.LaptopContext; +import behavior.statepattern.LaptopContext; public class SavingState implements PowerState{ diff --git a/src/behavior/strategypattern/Client.java b/src/behavior/strategypattern/Client.java new file mode 100644 index 0000000..de8b05c --- /dev/null +++ b/src/behavior/strategypattern/Client.java @@ -0,0 +1,20 @@ +package behavior.strategypattern; + +import behavior.strategypattern.context.Item; +import behavior.strategypattern.context.ShoppingCart; +import behavior.strategypattern.strategy.MasterCardStrategy; +import behavior.strategypattern.strategy.MobilePayStrategy; + +public class Client { + public static void main(String[] args) { + ShoppingCart cart = new ShoppingCart(); + cart.addItem(new Item("Macbook Pro", 10000)); + cart.addItem(new Item("IPhone", 2000)); + + cart.setPaymentStrategy(new MasterCardStrategy("Dmori", "1234-1234-1234-1234", "123")); + cart.pay(); + + cart.setPaymentStrategy(new MobilePayStrategy("example@naver.com", "12345")); + cart.pay(); + } +} diff --git a/src/behavior/strategypattern/context/Item.java b/src/behavior/strategypattern/context/Item.java new file mode 100644 index 0000000..b53e276 --- /dev/null +++ b/src/behavior/strategypattern/context/Item.java @@ -0,0 +1,16 @@ +package behavior.strategypattern.context; + +public class Item { + + private String name; + private int price; + + public Item(String name, int price) { + this.name = name; + this.price = price; + } + + public int getPrice() { + return price; + } +} diff --git a/src/behavior/strategypattern/context/ShoppingCart.java b/src/behavior/strategypattern/context/ShoppingCart.java new file mode 100644 index 0000000..691a606 --- /dev/null +++ b/src/behavior/strategypattern/context/ShoppingCart.java @@ -0,0 +1,32 @@ +package behavior.strategypattern.context; + +import behavior.strategypattern.strategy.PaymentStrategy; + +import java.util.ArrayList; +import java.util.List; + +public class ShoppingCart { + + private List items; + private PaymentStrategy paymentStrategy; + + public ShoppingCart() { + this.items = new ArrayList<>(); + } + + public void addItem(Item item) { + this.items.add(item); + } + + public void setPaymentStrategy(PaymentStrategy paymentStrategy) { + this.paymentStrategy = paymentStrategy; + } + + public void pay(){ + int amount = 0; + for (Item item : items) { + amount += item.getPrice(); + } + this.paymentStrategy.pay(amount); + } +} diff --git a/src/behavior/strategypattern/strategy/MasterCardStrategy.java b/src/behavior/strategypattern/strategy/MasterCardStrategy.java new file mode 100644 index 0000000..01efee7 --- /dev/null +++ b/src/behavior/strategypattern/strategy/MasterCardStrategy.java @@ -0,0 +1,19 @@ +package behavior.strategypattern.strategy; + +public class MasterCardStrategy implements PaymentStrategy { + + private String name; + private String cardNumber; + private String cvv; + + public MasterCardStrategy(String name, String cardNumber, String cvv) { + this.name = name; + this.cardNumber = cardNumber; + this.cvv = cvv; + } + + @Override + public void pay(int amount) { + System.out.println(amount + " Won paid using Master Card"); + } +} diff --git a/src/behavior/strategypattern/strategy/MobilePayStrategy.java b/src/behavior/strategypattern/strategy/MobilePayStrategy.java new file mode 100644 index 0000000..4ea59f6 --- /dev/null +++ b/src/behavior/strategypattern/strategy/MobilePayStrategy.java @@ -0,0 +1,17 @@ +package behavior.strategypattern.strategy; + +public class MobilePayStrategy implements PaymentStrategy { + + private String email; + private String password; + + public MobilePayStrategy(String email, String password) { + this.email = email; + this.password = password; + } + + @Override + public void pay(int amount) { + System.out.println(amount + " Won paid using Mobile Pay"); + } +} diff --git a/src/behavior/strategypattern/strategy/PaymentStrategy.java b/src/behavior/strategypattern/strategy/PaymentStrategy.java new file mode 100644 index 0000000..e87995a --- /dev/null +++ b/src/behavior/strategypattern/strategy/PaymentStrategy.java @@ -0,0 +1,5 @@ +package behavior.strategypattern.strategy; + +public interface PaymentStrategy { + void pay(int amount); +} diff --git a/src/statepattern/state/PowerState.java b/src/statepattern/state/PowerState.java deleted file mode 100644 index 63ce698..0000000 --- a/src/statepattern/state/PowerState.java +++ /dev/null @@ -1,7 +0,0 @@ -package statepattern.state; - -import statepattern.LaptopContext; - -public interface PowerState { - void pushPowerButton(LaptopContext context); -}