실행 중에 알고리즘을 선택할 수 있게 하는 행위 소프트웨어 디자인 패턴
특정한 계열의 알고리즘들을 정의하고 각 알고리즘을 캡슐화하며 이 알고리즘들을 해당 계열 안에서 상호 교체가 가능하게 만든다.
이점
컨텍스트 코드의 변경 없이 새로운 전략을 추가할 수 있다는 점입니다. 새로운 정책이 추가될 때 Strategy 인터페이스를 상속받아서 class를 구현하면 됩니다. 기존의 코드를 변경할 필요가 없죠.
public interface Strategy {
public int doOperation(int num1, int num2);
}
public class OperationAdd implements Strategy{
@Override
public int doOperation(int num1, int num2) {
return num1 + num2;
}
}
public class OperationSubtract implements Strategy{
@Override
public int doOperation(int num1, int num2) {
return num1 - num2;
}
}
public class OperationMultiply implements Strategy{
@Override
public int doOperation(int num1, int num2) {
return num1 * num2;
}
}
생성자를 통해서 전략을 선택
public class Context {
private Strategy strategy;
public Context(Strategy strategy) {
this.strategy = strategy;
}
public int executeStrategy(int num1, int num2) {
return strategy.doOperation(num1, num2);
}
}
전략에 따라서 실행되는 로직이 달라짐
public class StrategyPatternDemo {
public static void main(String[] args) {
Context context = new Context(new OperationAdd());
System.out.println(context.executeStrategy(10, 5)); // 15
context = new Context(new OperationSubtract());
System.out.println(context.executeStrategy(10, 5)); // 5
context = new Context(new OperationMultiply());
System.out.println(context.executeStrategy(10, 5)); // 50
}
}
'Design Pattern > 행위 패턴' 카테고리의 다른 글
Template Method Pattern (0) | 2021.06.24 |
---|---|
Strategy 전략 프로젝트에 적용 해보기 (0) | 2021.05.28 |
State Pattern (0) | 2021.05.13 |
Command Pattern (0) | 2021.05.12 |