티스토리 뷰
전략 패턴(strategy pattern) ≒ 정책 패턴(policy pattern)
전략이라고 부르는 '캡슐화'한 알고리즘을 선택할 수 있게 하는 소프트웨어 디자인 패턴이다.
면접을 위한 cs 전공 지식 노트 예제에서는 이커머스 사이트에서 결제를 할 때 다양한 방법을 선택할 수 있듯이, 예제에서 제품을 결제 방법의 '전략' (결제수단?)만 바꿔서 LUNACard로 사는 것과 KAKAOCard로 사는 것을 구연한 예시를 보여줬다.
/*
면접을 위한 cs 전공 지식 노트 예제
3.전략 패턴(strategy pattern)
객체의 행위를 바꾸고 싶은 경우 '직접'수정하지 않고 '캡슐화한 알고리즘'을 선택할 수 있도록하는
소프트 웨어 디자인 패턴이다.
*/
import java.text.DecimalFormat;
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 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 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 HelloWorld {
public static void main(String[] args) {
ShoppingCart cart = new ShoppingCart();
Item A = new Item("kundolA", 100);
Item B = new Item("kundolB", 300);
cart.addItem(A);
cart.addItem(B);
// pay by LUNACard
cart.pay(new LUNACardStrategy("kundol@example.com","pukubababo"));
// pay by KAKAOCard
cart.pay(new KAKAOCardStrategy("Ju hongchul", "123456789","123","12/01"));
}
}
/* 실행 결과값
400 paid using LUNACard.
400 paid using KAKAOCard.
*/
'study > Web' 카테고리의 다른 글
디자인 패턴 - 프록시 패턴(proxy pattern) (0) | 2022.10.20 |
---|---|
디자인 패턴 - 옵저버 패턴(observer pattern) (0) | 2022.10.13 |
디자인 패턴 - 팩토리 패턴 (factory pattern) (0) | 2022.10.06 |
디자인 패턴 - 싱글톤 패턴 (singleton pattern) (0) | 2022.10.06 |
Mqtt protocol (0) | 2022.08.29 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- git 공부
- 디자인 패턴
- Spring
- django
- git
- 회원 로그인
- Django tutorial
- API
- Python
- Magazine K
- 검색 결과 내 페이지네이션
- 혼자 공부하는 파이썬
- 커맨드 객체
- django.contrib.auth
- 배열
- 회원가입
- 환경 변수 설정
- 톰캣
- 면접을 위한 CS 전공 지식 노트
- authenticate()
- python3
- django-environ
- 암호화
- 한글 형태소 분석기
- musma
- 웹페이지
- error: failed to push some refs to 'https://github.com/
- git공부
- path variable
- Java
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
글 보관함