ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자바 디자인 패턴(3)_전략 패턴
    Java 2023. 11. 6. 16:58

    전략 패턴

    • 객체의 행위를 바꾸고 싶을 때 캡슐화한 알고리즘 컨텍스트 안에서 바꿔주면서 상호 교체가 가능하게 만드는 패턴

     

    // 결제 방식(전략)만 바꿔서 결제하는 로직
    import java.util.*;
    
    interface PaymentStrategy {
        public void pay(int amount);
    }
    
    class KAKAOCardStrategy implements PaymentStrategy {
        private String name;
        private String cardNumber;
        private String cvv;
        private String dateOfExpiry;
        
        public KAKAOCardStrategy(String nm, String ccNum, String cvv, String expiryDate) {
            this.name = nm;
            this.cardNumber = ccNum;
            this.cvv = cvv;
            this.dateOfExpiry = expiryDate;
        }
        
        @Override
        public void pay(int amount) {
            System.out.println(amount+" paid KAKAO");
        }
    }
    
    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 LUNA");
        }
    }
    
    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 int calculateTot() {
            int sum = 0;
            for (Item item : items) {
                sum += item.getPrice();
            }
            return sum;
        }
        
        public void pay(PaymentStrategy payMethod) {
            int amount = calculateTot();
            payMethod.pay(amount);
        }
    }
    
    public class HelloWorld{
         public static void main(String []args){
            ShoppingCart cart = new ShoppingCart();
            
            Item a = new Item("A", 100);
            Item b = new Item("B", 200);
            
            cart.addItem(a);
            cart.addItem(b);
            
            cart.pay(new LUNACardStrategy("email@email.com", "password")); // 300 paid LUNA
            cart.pay(new KAKAOCardStrategy("kwak", "123", "456", "11/06")); // 300 paid KAKAO
         }
    }

     

     

     

    출처)

    책 : 면접을 위한 CS 전공지식 노트

Designed by Tistory.