-
자바 디자인 패턴(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 전공지식 노트
'Java' 카테고리의 다른 글
자바 프록시 관련 내용(simple) (0) 2023.11.06 자바 디자인 패턴(4)_옵저버 패턴 (0) 2023.11.06 자바 디자인 패턴(2)_팩토리 패턴 (0) 2023.11.06 자바 디자인 패턴(1)_싱글톤 패턴 (0) 2023.11.06 자바 String, StringBuffer, StringBuilder 차이 (0) 2023.10.12