- [디자인 패턴] 10. 전략 패턴2024년 09월 27일
- Song hyun
- 작성자
- 2024.09.27.:39
728x90반응형[디자인 패턴] 10. 전략 패턴
1. 전략 패턴이란?
(1) 전략 패턴의 개념
-전략 패턴(Strategy Pattern)은 동작 방식을 캡슐화해, 동적으로 전략을 변경할 수 있도록 하는 디자인 패턴이다.
-특정 기능을 수행할 여러 방법이 있을 때, 그 방법들을 전략으로 정의하고, 필요에 따라 적절한 전략을 사용할 수 있다.
(2) 전략 패턴의 활용 사례
-암호화/인코딩 알고리즘 : 암호화/인코딩 방식 중 동적으로 선택할 수 있게 해준다.
-게임 개발 : 캐릭터의 동적인 행동 변경 구현
-결제 처리 시스템 : 결제 방식을 동적으로 선택할 수 있는 시스템
2. 시나리오 코드
// Source code is decompiled from a .class file using FernFlower decompiler. package strategy; public class Strategy { public static void main(String[] args) { // 클라이언트 측 코드 String message = "password 1234"; // 1. 텍스트를 인코딩하는 클래스를 메모리에 올린다. Encoder encoder = new Encoder(); // 전략 클래스 미리 생성해보기 NormalStrategy normalStrategy = new NormalStrategy(); Base64Strategy base64Strategy = new Base64Strategy(); AppendStrategy appendStrategy = new AppendStrategy(); // 전략을 선택해서 설정 encoder.setEncodingStrategy(appendStrategy); // 기능 호출 해보기 String outputMessage1 = encoder.getMessage(message); System.out.println(outputMessage1); // 전략 변경해보기 encoder.setEncodingStrategy(appendStrategy); // 두 번째 기능 호출해보기 String outputMessage2 = encoder.getMessage(message); System.out.println(outputMessage2); // 전략 변경해보기 encoder.setEncodingStrategy(normalStrategy); // 세 번째 기능 호출해보기 String outputMessage3 = encoder.getMessage(message); System.out.println(outputMessage3); } // end of main } // 인코딩 전략 인터페이스 interface EncodingStrategy{ String encode(String text); } // 일반 텍스트를 보내는 전략 클래스 생성 class NormalStrategy implements EncodingStrategy{ @Override public String encode(String text) { return text; } } // Base64 인코딩 전략 class Base64Strategy implements EncodingStrategy{ @Override public String encode(String text) { return Base64.getEncoder().encodeToString(text.getBytes()); } } // 특정 문자열을 추가하는 인코딩 전략 class AppendStrategy implements EncodingStrategy{ @Override public String encode(String text) { return text+" : "+"not base64"; } } // 클라이언트 클래스 class Encoder { // 1. 추상화 (멤버) private EncodingStrategy encodingStrategy; // 포함 관계 (Composition Relation) // 2. 전략에 따라 메세지를 인코딩하여 반환 public String getMessage(String message){ return this.encodingStrategy.encode(message); } // 3. 전략을 따라서 동적으로 전략을 선택할 수 있는 기능 public void setEncodingStrategy(EncodingStrategy encodingStrategy){ this.encodingStrategy = encodingStrategy; } }
728x90반응형'디자인 패턴' 카테고리의 다른 글
[디자인 패턴] 10. 전략패턴 예제: UTF-8 인코딩/디코딩 (0) 2024.09.27 [디자인 패턴] 9. 어댑터 패턴 (1) 2024.09.26 [디자인 패턴] 8. 팩토리 패턴 (1) 2024.09.26 [디자인 패턴] 7. 빌더 패턴 예제: 마라탕 주문하기 (0) 2024.09.26 [디자인 패턴] 7. 빌더 패턴 (0) 2024.09.26 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)