본문 바로가기
언어/JAVA

Strategy pattern (전략 패턴)

by step 1 2021. 6. 6.
반응형

전략패턴이라 불리며, 객체지향의 꽃이다.

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

 

전략 메서드를 가진 전략 객체 (Normal Strategy, Base64 Strategy)

전략 객체를 사용하는 컨텍스트(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);
}
package com.company.design.strategy;

public class NormalStrategy implements EncodingStrategy{
    @Override
    public String encode(String text) {
        return text;
    }
}
package com.company.design.strategy;

import java.nio.charset.StandardCharsets;
import java.util.Base64;

public class Base64Strategy implements EncodingStrategy{
    @Override
    public String encode(String text) {
        return Base64.getEncoder().encodeToString(text.getBytes());
    }
}
package com.company.design.strategy;

public class AppendStrategy implements EncodingStrategy{

    @Override
    public String encode(String text) {
        return "ABCD " + text;
    }
}
package com.company.design.strategy;

public class main {

    public static void main(String[] args) {
        Encoder encoder = new Encoder();

//        base64
        EncodingStrategy base64 = new Base64Strategy();

//        normal
        EncodingStrategy normal = new NormalStrategy();

        String message = "hello java";

        encoder.setEncodingStrategy(base64);
        String base64Result = encoder.getMessage(message);
        System.out.println(base64Result);

        encoder.setEncodingStrategy(normal);
        String normalResult = encoder.getMessage(message);
        System.out.println(normalResult);

        encoder.setEncodingStrategy(new AppendStrategy());
        String appendResult = encoder.getMessage(message);
        System.out.println(appendResult);
    }
}

반응형

'언어 > JAVA' 카테고리의 다른 글

Optional  (0) 2022.08.07
Facade pattern  (0) 2021.06.06
Observer pattern  (0) 2021.06.06
데코레이터 패턴  (0) 2021.06.06
Proxy pattern  (0) 2021.06.06