728x90
Strategy pattern은
전략 패턴으로 불리며, 객체지향의 꽃이다.
유사한 행위들을 캠슐화하여, 객체의 행위를 바꾸고 싶은 경우 직접 변경하는 것이 아닌 전략만 변경 하여,
유연하게 확장 하는 패턴 SOLID중에서 개방폐쇄 원칙(OCP)과 의존 역전 원칙(DIP)를 따른다.
예제(Encoding관련)
전략 메서드를 가진 전략 객체 (Normal Strategy, Base64 Strategy)
전략 객체를 사용하는 컨텍스트(Encoder)
전략 객체를 생성해 컨텍스트에 주입하는 클라이언트
꼭 있어야 할 3가지
1. 전략메서드를 가지는 전략객체(Normal,Base64)
2.전략객체를 사용하는 콘텍스트(encoder)
3.전략 객체를 생성해서 콘텍스트에 주입하는 클라이언트(Main메소드)
EncodingStrategy(인터페이스)
package Muzi.Strategy;
public interface EncodingStrategy {
String encode(String text);
}
Encoder(클래스)
package Muzi.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;
}
}
Base64(클래스) = EncodingStrategy(상속)
package Muzi.Strategy;
import java.util.Base64;
public class Base64Strategy implements EncodingStrategy{
@Override
public String encode(String text) {
return Base64.getEncoder().encodeToString(text.getBytes());
}
}
EncodingStrategy(클래스) = EncodingStrategy(상속)
package Muzi.Strategy;
public class NormalStrategy implements EncodingStrategy{
@Override
public String encode(String text) {
return text;
}
}
EncodingStrategy(클래스) = EncodingStrategy(상속)
package Muzi.Strategy;
public class AppendStrategy implements EncodingStrategy{
@Override
public String encode(String text) {
return "ABCD"+text;
}
}
Main(클래스)
package Muzi;
import Muzi.Strategy.AppendStrategy;
import Muzi.Strategy.Base64Strategy;
import Muzi.Strategy.Encoder;
import Muzi.Strategy.EncodingStrategy;
import Muzi.Strategy.NormalStrategy;
public class Main {
public static void main(String[] args) {
//실제 원본
Encoder encoder = new Encoder();
//base64 전략
EncodingStrategy base64 = new Base64Strategy();
//nomal 전략(안넣어도됨)
EncodingStrategy normal = new NormalStrategy();
String message = "hello java";
//base64사용할때 전략세팅
encoder.setEncodingStrategy(base64);
String base64Result = encoder.getMessage(message);
System.out.println(base64Result);
//normal사용할때 전략세팅
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);
}
}
실제 원본은 그대로 두고 전략만 수정해서 다른 값을 얻어낸다
앞으로 많이 사용할 예정
'Spring > 디자인패턴' 카테고리의 다른 글
Facade Pattern(파사드 패턴) (0) | 2023.07.24 |
---|---|
ObserverPattern(옵저버 패턴) (0) | 2023.07.24 |
Decorator pattern(데코레이터 패턴) (0) | 2023.07.24 |
Proxy pattern(프록시 패턴) (0) | 2023.07.21 |
Adapter Pattern(어댑터 패턴) (0) | 2023.07.19 |