[DesignPattern] 전략 패턴(Strategy Pattern)이란?
September 07, 2019
메인 프로세스에서 상황에 맞게 전략을 선택하여 실행하는 패턴입니다
이 패턴은 가장 기본적이며 인터페이스의 필요여부를 가장 잘 보여 주고 많은 곳에서 사용하고 있는 패턴입니다
이 그림에서 볼 수 있듯이 하나의 인터페이스를 두고 클래스들이 인터페이스를 구현하여 사용됩니다
Strategy Sample
StrategyInterface
public interface Strategy {
public void execute();
}
ContentsStrategyA
public class ContentsStrategyA implements Strategy{
@Override
public void execute() {
System.out.println("앞으로 이동");
}
}
ContentsStrategyB
public class ContentsStrategyB implements Strategy{
@Override
public void execute() {
System.out.println("뒤로 이동");
}
}
Main
@SpringBootApplication
public class SimpleCode{
//Run
public void robot() {
//전략 리스트
List<String> moveList = Arrays.asList("go", "back", "go", "go");
List<Strategy> strategyList = new ArrayList<>();
moveList.forEach(m -> {
switch (m) {
case "go":
strategyList.add(new ContentsStrategyA()); //기능 A
break;
case "back":
strategyList.add(new ContentsStrategyB()); //기능 B
break;
}
});
strategyList.forEach(Strategy::execute); //기능 실행
}
}
실행결과
앞으로 이동
뒤로 이동
앞으로 이동
앞으로 이동
위에 code를 보시면 먼저 StrategyInterface 인터페이스를 구현합니다
그리고 각각의 기능을 ContentsStrategyA, ContentsStrategyB에서 구현하게 됩니다
그러면 메인프로세스는 StrategyInterface만으로 각각의 상황에 맞춰 전략을 선택하고 실행 할 수 있습니다