상세 컨텐츠

본문 제목

전략 패턴

Back-end/JavaSpringBoot

by 본투비곰손 2022. 8. 3. 23:54

본문

728x90

전략패턴 (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);
    }
}
728x90

'Back-end > JavaSpringBoot' 카테고리의 다른 글

REST  (0) 2022.08.04
웹 개론  (0) 2022.08.04
파사드 패턴  (0) 2022.08.03
옵저버 패턴  (0) 2022.08.03
데코레이터 패턴  (0) 2022.08.03

관련글 더보기