전략패턴 (Strategy pattern)
객체 지향의 꽃으로 유사한 행위들을 캡슐화 하여 , 객체의 행위를 바꾸고 싶은 경우 직접 변경하는 것이 아니라 전략만 변경하여, 유연하게 확장하는 패턴 개방페쇄 원칙과 의존 역전 원칙을 따른다.
전략을 사용 할 encoder 객체를 만들어 준다.
package com.company.design.strategy;
public class Encoder {
private EncodingStrategy encodingStrategy;
public String getMessage(String message){
return this.encodingStrategy.encode(message);
}// 인코더를 세팅할 수 있도록 메소드 제공
public void setEncodingStrategy(EncodingStrategy encodingStrategy) {
this.encodingStrategy = encodingStrategy;
}
}
전략에 사용 할 인터페이스를 만들어 준다.
package com.company.design.strategy;
public interface EncodingStrategy {
String encode(String text);
}
각각의 전략을 사용한 객체를 만들어 준다.
nomal 전략 객체
package com.company.design.strategy;
public class NomalStrategy implements EncodingStrategy{
@Override
public String encode(String text) {
return text;
}
}
base64를 사용한하여 Bytes를 가져올 객체
package com.company.design.strategy;
import java.util.Base64; // 자바 유틸중 하나
public class Base64Strategy implements EncodingStrategy{
@Override
public String encode(String text) {
return Base64.getEncoder().encodeToString(text.getBytes());
}
}
단어를 추가하는 Append 객체
package com.company.design.strategy;
public class AppendStrategy implements EncodingStrategy{
@Override
public String encode(String text) {
return "abcd"+text;
}
}
encoder을 사용하여 각각의 전략을 사용하고 서로 다른 값을 출력한다.
public class main {
public static void main(String[] args) {
Encoder encoder = new Encoder();
// base64
EncodingStrategy base64 = new Base64Strategy();
//nomal
EncodingStrategy nomal = new NomalStrategy();
String message = "hello World";
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(new AppendStrategy());
String appendResult = encoder.getMessage(message);
System.out.println(appendResult);
}
}