스파이더웹 2022. 7. 20. 14:09
728x90
반응형
  • 객체의 행위를 바꾸고 싶은 경우 직접 수정하지 않고 전략이라고 부르는 ‘캡슐화한 알고리즘’을 컨텍스트 안에서 바꿔주면서 상호 교체가 가능하게 만드는 패턴프로그래밍에서의 상황, 맥락, 문맥을 의미하며 개발자가 작업을 완료하는데 필요한 모든 관련 정보
  • ※ 컨텍스트란?
전략패턴

package book.designpattern;

import java.util.ArrayList;
import java.util.List;

interface PaymentStrategy {
    public void pay(int amount);
}

class KAKAOCard implements PaymentStrategy{
    private String name;
    private String cardNumber;
    private String cvv;
    private String dateOfExpiry;

    public KAKAOCard(String name, String cardNumber, String cvv, String expiryDate){
        this.name = name;
        this.cardNumber = cardNumber;
        this.cvv = cvv;
        this.dateOfExpiry = expiryDate;
    }

    @Override
    public void pay(int amount) {
        System.out.println(amount + " 카카오 카드 사용");
    }
}

class NAVERCardStrategy implements PaymentStrategy {
    private String emailId;
    private String password;

    public NAVERCardStrategy(String emailId, String password){
        this.emailId = emailId;
        this.password = password;
    }

    @Override
    public void pay(int amount) {
        System.out.println(amount + " 네이버 카드 사용");
    }
}

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 paymentStrategy){
        int amount = calculateTotal();
        paymentStrategy.pay(amount);
    }
}

public class Strategy {

    public static void main(String[] args) {

        ShoppingCart cart = new ShoppingCart();

        Item A = new Item("Tv", 100);
        Item B = new Item("Computer", 300);

        cart.addItem(A);
        cart.addItem(B);

        cart.pay(new KAKAOCard("KODAE","1234","123","12/28"));
        cart.pay(new NAVERCardStrategy("1234@naver.com", "1234"));
    }
}
728x90
반응형