전략은 행동들의 객체들을 객체들로 변환하며 이들이 원래 콘텍스트 객체 내에서 상호 교환이 가능하게 만드는 행동 디자인 패턴입니다.
원래 객체는 콘텍스트라고 불리며 전략 객체에 대한 참조를 포함합니다. 콘텍스트는 행동의 실행을 연결된 전략 객체에 위임합니다. 콘텍스트가 작업을 수행하는 방식을 변경하기 위하여 다른 객체들은 현재 연결된 전략 객체를 다른 전략 객체와 대체할 수 있습니다.
복잡도:
인기도:
사용 사례들: 전략 패턴은 자바 코드에서 매우 일반적입니다. 이 패턴은 다양한 프레임워크에서 사용자들이 클래스를 확장하지 않고 클래스의 행동을 변경할 수 있도록 자주 사용됩니다.
자바 8은 람다 함수를 지원하기 시작했으며, 해당 함수는 전략 패턴의 더 간단한 대안으로 사용될 수 있습니다.
다음은 코어 자바 라이브러리로부터 가져온 전략 패턴의 몇 가지 예시들입니다:
식별: 전략 패턴은 중첩된 객체가 실제 작업을 수행할 수 있도록 하는 메서드가 있으며 또 해당 객체를 다른 객체로 대체할 수 있는 세터가 있습니다.
전자상거래 앱의 결제 메서드
이 예시에서의 전략 패턴은 전자 상거래 앱의 다양한 지불 메서드들을 구현하는 데 사용합니다. 구매할 제품을 선택한 후 고객은 페이팔 또는 신용 카드 지불 메서드를 선택합니다.
구상 전략들은 실제 지불을 수행할 뿐만 아니라 체크아웃 양식의 행동을 변경하여 지불 세부 정보들을 기록하는 적절한 필드들을 제공합니다.
strategies
strategies/PayStrategy.java: 결제 메서드들의 공통 인터페이스
strategies/PayByPayPal.java: 페이팔을 통한 결제
strategies/PayByCreditCard.java: 크레딧 카드를 통한 결제
strategies/CreditCard.java: 크레딧 카드 클래스
order
order/Order.java: 주문 클래스
Demo.java: 클라이언트 코드
OutputDemo.txt: 실행 결과