오답노트

[Java] 전략 패턴 본문

Java/디자인패턴

[Java] 전략 패턴

권멋져 2023. 7. 12. 10:08

전략 패턴

유사한 행위들을 캡슐화하여, 객체의 행위를 바꾸고 싶은 경우 직접 변경하는 것이 아닌 전략만 변경하여, 유연하게 확장하는 패턴이다. 개방폐쇄 원칙과 의존 역전 원칙을 따른다.

 

예제

클래스

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