ShoppingCart
장바구니가 결제 흐름을 소유하고 구체 결제 방식은 알지 않습니다.
결제 흐름은 유지하고 PaymentStrategy 구현만 바꾸면 분기문 없이 결제 알고리즘을 교체할 수 있습니다.
장바구니가 결제 흐름을 소유하고 구체 결제 방식은 알지 않습니다.
pay(amount)라는 공통 호출 규칙으로 모든 결제 구현을 묶습니다.
카드 승인과 결제 세부 절차를 독립된 전략으로 캡슐화합니다.
같은 계약으로 다른 결제 알고리즘을 제공해 호출부 분기를 없앱니다.
실행 시점에 사용할 전략을 갈아 끼워 같은 장바구니 흐름을 재사용합니다.
핵심전략 패턴은 바뀌는 행동을 타입 계약 뒤에 숨겨 컨텍스트와 구현의 결합을 낮춥니다.