less than 1 minute read

  • 유사행위들을 캡슐화함.
  • 객체 행위를 바꾸고 싶은 경우 직접 객체변경이 아닌 전략만 변경하여 유연하게 확장함.
  • SOLID 원칙들 중에서 객방패쇄원칙(OCP)과 의존역전원칙(DIP)을 따름

예제코드 (인코더)

  • 인코딩 없는 전략객체, Base64, Base32 객체등 의 여러 전략객체를 사용하는 컨텍스트인 Encoder 그리고, 전략객체를 생성해 컨텍스트에 주입하는 Client로 이루어진 인코더를 프로그래밍 해본다.

전략패턴 적용 전

인코딩 전략 인터페이스와 전략들

public interface EncodingStrategy{
    String encode(String text);
}
public class NormalStrategy 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().ecodeToString(text.getBytes());
  }
}
public class OtherStrategy implements EncodingStrategy{
    @Override
    public String encode(String text){
        return "otherStrategy : "+text;
    }
}
  • 아래 클래스의 변경없이 Strategy의 추가나 수정만으로 다양한 케이스에 대해 대응할 수 있다.
    public class Encoder {
    private EncodingStrategy encodingStrategy;
    
    public void setEncodingStrategy(EncodingStrategy encodingStrategy) {
      this.encodingStrategy = encodingStrategy;
    }
    }
    

실행코드

public class Main {

    public static void main(String[] args){
    	
        Encoder encoder = new Encoder();
        String message = "hello~";
    	
    	// base64
        EncodingStrategy base64 = new Base64Strategy();
        encoder.setEncodingStrategy(base64);
        String base64Result = encoder.getMessage(message);

        // normal
        EncodingStrategy normal = new NormalStrategy();
        encoder.setEncodingStrategy(normal);
        String normalResult = encoder.getMessage(message);
        
        // other
        EncodingStrategy normal = new OtherStrategy();
        encoder.setEncodingStrategy(normal);
        String normalResult = encoder.getMessage(message);
    }
}

```

Comments