전략 인터페이스 + 전략 구체 클래스 + 컨텍스트 클래스 + 메인 클래스
전략 패턴
알고리즘(전략)을 통째로 갈아 끼울 수 있게 만드는 패턴
if문을 늘리지 않고 기존 코드를 수정하지 않아도 됨
전략 인터페이스를 정의한 후 필요한 만큼 전략 클래스를 만들면 됨!!
=> OCP 원칙 만족
public interface IBehaviorStrategy {
void behave(String context);
}
public class ActionMaskStrategy implements IBehaviorStrategy{
@Override
public void behave(String context) {
System.out.println(context + " 상황! 액션가면 출동! ⭐");
}
}
public class DanceStrategy implements IBehaviorStrategy{
@Override
public void behave(String context) {
System.out.println(context + " 상황? 상관없다! 🔥");
System.out.println("엉덩이를 씰룩쌜룩! 부리부리 춤을 춥니다! + 방귀 공격 뿡뿡! (엄마, 아빠 기절)");
}
}
public class SleepStrategy implements IBehaviorStrategy{
@Override
public void behave(String context) {
System.out.println(context + " 상황... 으음... Zzz... 😴");
System.out.println("눈을 감고 큰 소리로 코를 골아 상황을 회피합니다. ");
}
}
import java.util.HashMap;
import java.util.Map;
public class 짱구 {
private Map<String, IBehaviorStrategy> strategyMap = new HashMap<>();
public 짱구() {
strategyMap.put("잔소리", new SleepStrategy());
strategyMap.put("울고", new ActionMaskStrategy());
strategyMap.put("신나게", new DanceStrategy());
strategyMap.put("엉덩이", new DanceStrategy());
strategyMap.put("방귀 ", new DanceStrategy());
}
public void encounterSituation(String context) {
for (String keyword : strategyMap.keySet()) {
if (context.contains(keyword)) {
strategyMap.get(keyword).behave(context);
return;
}
}
System.out.println("짱구는 아무 생각이 없습니다....");
}
}

IBehavoirStrategy 인터페이스를 하나 만든 후,
내가 원하는만큼 구체적인 전략 클래스들을 만든 다음에
상황 클래스에서 전략을 사용하는 상황들을 구현하면 됨
-> 가독성도 좋고, 이해하기도 편하고, SOLID 원칙도 만족하게 됨!!
상황을 내가 만들고 전략을 추가하니 훨씬 이해하기도 편했고 만들면서도 재미있었다,, 나중에 훨씬 복잡한 상황들을 구현할 때 편하고 유용하게 쓸 수 있을 것 같음