Strategy Pattern
- 객체의 행위를 바꾸고 싶은 경우 직접 수정하지 않고 전략이라고 부르는 캡슐화 알고리즘을 컨텍스트 안에서 바꿔주는 것
package designpattern.strategy;
import java.util.ArrayList;
import java.util.List;
interface PaymentStrategy {
public void pay(int amount);
}
class KAKAOCardStrategy implements PaymentStrategy {
private String name;
private String cardNumber;
private String cvv;
private String dateOfExpiy;
public KAKAOCardStrategy(String nm, String ccNum, String cvv, String expiryDate) {
this.name = nm;
this.cardNumber = ccNum;
this.cvv = cvv;
this.dateOfExpiy = expiryDate;
}
@Override
public void pay(int amount) {
System.out.println(amount + " paid using KAKAOCard.");
}
}
class LUNACardStrategy implements PaymentStrategy {
private String emailId;
private String password;
public LUNACardStrategy(String email, String pwd) {
this.emailId = email;
this.password = pwd;
}
@Override
public void pay(int amount) {
System.out.println(amount + " paid using LUNACard.");
}
}
class Item {
private String name;
private int price;
public Item(String name, int cost) {
this.name = name;
this.price = cost;
}
public String getName() {
return name;
}
public int getPrice() {
return price;
}
}
class ShoppingCart {
List<Item> items;
public ShoppingCart() {
this.items = new ArrayList<Item>();
}
public void addItem(Item item) {
this.items.add(item);
}
public void removeItem(Item item) {
this.items.remove(item);
}
public int calculateTotal() {
int sum = 0;
for(Item item : items) {
sum += item.getPrice();
}
return sum;
}
public void pay(PaymentStrategy paymentMethod) {
int amount = calculateTotal();
paymentMethod.pay(amount);
}
}
public class Main {
public static void main(String[] args) {
ShoppingCart shoppingCart = new ShoppingCart();
Item A = new Item("kundolA", 100);
Item B = new Item("kundolB", 300);
shoppingCart.addItem(A);
shoppingCart.addItem(B);
shoppingCart.pay(new LUNACardStrategy("kundol@example.com","pukubbabao"));
shoppingCart.pay(new KAKAOCardStrategy("Ju Hongchul","123456789","123","12/01"));
}
}
전략패턴의 구현
1. 전략 메서드를 지닌 전략 객체 ( PaymentStrategy 및 이를 상속하는 결제 수단)
2. 전략 객체를 사용하는 컨텍스트( Shopping Cart)
3. 클라이언트 ( Main 함수)
3가지를 구현해야한다 .
전략패턴의 장점
1. 기존 코드의 변경 없이 쉽게 안쪽의 알고리즘을 변경할 수 있다.
2. 코드 중복이 방지된다.
전략패턴의 단점
1. 클라이언트쪽에 책임이 더해짐
2. 전략의 개수만큼 객체가 생성되어야함.
728x90
반응형
'Design Pattern' 카테고리의 다른 글
Iterator Pattern (0) | 2023.06.18 |
---|---|
프록시 패턴 (0) | 2023.06.18 |
Observer Pattern (0) | 2023.06.17 |
Factory Pattern (0) | 2023.06.11 |
디자인 패턴과 Singleton Pattern (0) | 2023.06.11 |