-
[디자인 패턴] 전략 패턴 (Strategy Pattern)Computer Science/Design Pattern 2022. 12. 13. 14:09반응형
전략패턴이란?
: 실행 중에 알고리즘을 선택할 수 있게 하는 행위(Behavioral) 소프트웨어 디자인 패턴
- 특정한 계열의 알고리즘을 정의하고 각각 캡슐화하며 해당 계열내에서 상호 교체가 가능하게 함
- 어떤 동작을 하는 로직을 정의하고, 이것을 캡슐화하여 관리하는 패턴
(ex. 결제할 때 네이버페이, 카카오페이 등 '전략'만 바꿔서 결제가 가능하게 함)
- 독립적으로 알고리즘을 다양하게 변경할 수 있으며 기능 추가, 로직 변경시 유연하게 확장 가능
- 어떤 전략을 사용할지 외부에서 데이터 입력이 필요
- 클래스를 수정하지 않고도 기능을 추가하거나 변경할 수 있음[ 구현 방법 ]
// 결제 전략 인터페이스 interface PaymentStartegy { public void pay(int amount); } // 1. 카카오페이를 통한 결제 class KakaoPay implements PaymentStrategy { private String name; private String cardNumber; private String cvv; private String dateOfExpiry; public KakaoPay(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 using KaKao."); } } // 2. 네이버페이를 통한 결제 class NaverPay implements PaymentStrategy { private String emailId; private String password; public NaverPay(String email, String pwd) { this.emaildId = email; this.password = pwd; } @Override public void pay(int amount) { System.out.println(amount + " paid using Naver."); } } // 구매 물건 정보를 저장할 클래스 class Item { private String name; private int price; private 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 caculateTotal() { 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 Test { public static void main(String[] args) { ShoppingCart cart = new ShoppingCart(); Item A = new Item("orange", 300); Item B = new Item("pizza", 1000); cart.pay(new NaverPay("erin@naver.com", "hello")); } } /* 1300 paid using NaverPay */
반응형'Computer Science > Design Pattern' 카테고리의 다른 글
[디자인 패턴] 프록시 패턴 (Proxy Pattern) (0) 2022.12.13 [디자인 패턴] 옵저버 패턴 (Observer Pattern) (0) 2022.12.13 [디자인 패턴] 팩토리 패턴 (factory pattern) (0) 2022.12.13 [디자인 패턴] 싱글톤 패턴(Singleton Pattern) (0) 2022.12.12 [디자인 패턴 Java] 디자인 패턴이란? (0) 2022.10.12