오답노트
[Java] 전략 패턴 본문
전략 패턴
유사한 행위들을 캡슐화하여, 객체의 행위를 바꾸고 싶은 경우 직접 변경하는 것이 아닌 전략만 변경하여, 유연하게 확장하는 패턴이다. 개방폐쇄 원칙과 의존 역전 원칙을 따른다.
예제
클래스
public interface EncodingStrategy {
String encode(String text);
}
public class Encoder {
private EncodingStrategy encodingStrategy;
public void setEncodingStrategy(EncodingStrategy encodingStrategy) {
this.encodingStrategy = encodingStrategy;
}
public String getMessage(String msg){
return this.encodingStrategy.encode(msg);
}
}
public class NomalStrategy implements EncodingStrategy{
@Override
public String encode(String text) {
return text;
}
}
import java.util.Base64;
public class Base64Strategy implements EncodingStrategy{
@Override
public String encode(String text) {
return Base64.getEncoder().encodeToString(text.getBytes());
}
}
public class AppendStrategy implements EncodingStrategy{
@Override
public String encode(String text) {
return "ABCD" + text;
}
}
실행
import strategy.*;
public class Main {
public static void main(String[] args) {
Encoder encoder = new Encoder();
//base64
EncodingStrategy base64 = new Base64Strategy();
//Nomal
EncodingStrategy nomal = new NomalStrategy();
//Append
EncodingStrategy append = new AppendStrategy();
String message = "hoho";
encoder.setEncodingStrategy(base64);
String base64Result = encoder.getMessage(message);
System.out.println(base64Result);
encoder.setEncodingStrategy(nomal);
String nomalResult = encoder.getMessage(message);
System.out.println(nomalResult);
encoder.setEncodingStrategy(append);
String appendResult = encoder.getMessage(message);
System.out.println(appendResult);
}
}
encoder 인스턴스에 어떤 인코딩 방식(전략)을 넣는냐에 따라 같은 메소드인데도 다른 결과를 가진다.
'Java > 디자인패턴' 카테고리의 다른 글
[Java] 파사드 패턴 (0) | 2023.07.12 |
---|---|
[Java] 옵저버 패턴 (0) | 2023.07.12 |
[Java] 프록시 패턴 (0) | 2023.07.11 |
[Java] 어댑터 패턴 (0) | 2023.07.11 |
[Java] 데코레이터 패턴 (0) | 2023.07.11 |