2021.06.03 - [분류 전체보기] - [디자인패턴]파사드 패턴(Facade Pattern)
디자인 패턴_Detail_5
Strategy Pattern
- 전략 패턴으로 불리며 객체지향의 꽃이라고 불린다.
- 유사한 행위들을 캡슐화
- 객체의 행위를 바꾸고 싶은 경우 직접 변경하는 것이 아닌 전략만 변경
- 유연하게 확장하는 패턴으로 SOLID 중 개방폐쇄 원칙(OCP)와 의존 역전 원칙(DIP)를 따름
EncodingStrategy Interface
package design.strategy;
public interface EncodingStrategy {
String encode(String text);
}
NormalStrategy
package design.strategy;
public class NormalStrategy implements EncodingStrategy {
@Override
public String encode(String text) {
return text;
}
}
Base64Strategy
package design.strategy;
import java.util.Base64;
public class Base64Strategy implements EncodingStrategy {
@Override
public String encode(String text) {
return Base64.getEncoder().encodeToString(text.getBytes());
}
}
AppendStrategy
package design.strategy;
public class AppendStrategy implements EncodingStrategy{
@Override
public String encode(String text) {
return "ABCD"+text;
}
}
Encoder
package design.strategy;
public class Encoder {
private EncodingStrategy encodingStrategy;
public String getMessage (String messge){
return this.encodingStrategy.encode(messge);
}
public void setEncodingStrategy(EncodingStrategy enCodingStrategy) {
this.encodingStrategy = enCodingStrategy;
}
}
- 기본 인코더
- setEncodingStrategy() 메서드를 이용해 전략을 주입한다.
Main
package design;
import design.strategy.AppendStrategy;
import design.strategy.Base64Strategy;
import design.strategy.Encoder;
import design.strategy.EncodingStrategy;
import design.strategy.NormalStrategy;
public class Main {
public static void main(String[] args) {
// 기본 인코더
Encoder encoder = new Encoder();
// base64
EncodingStrategy base64 = new Base64Strategy();
// noramal
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);
}
}
출력 결과
aGVsbG8gamF2YQ==
hello java
ABCDhello java
반응형
'공부 기록' 카테고리의 다른 글
[JAVA]J-Unit Test_Basic (0) | 2021.06.18 |
---|---|
[REACT]30분만에 대충 보고 당장 써보는 리액트 (0) | 2021.06.07 |
[디자인패턴]파사드 패턴(Facade Pattern) (0) | 2021.06.03 |
[디자인패턴] 데코레이터 패턴(Decorator Pattern), 옵저버 패턴(Observer Pattern) (0) | 2021.06.03 |
[디자인패턴] 프록시 패턴(Proxy Pattern) _ AOP (0) | 2021.06.03 |
댓글