전략패턴이란?
하나씩 코드로 직접 이해해보자
package DesignPattern.strategyPattern;
public class StrategyGun implements Strategy{
@Override
public void runStrategy() {
System.out.println("GUN");
}
}
class StrategySword implements Strategy{
@Override
public void runStrategy() {
System.out.println("SWORD");
}
}
class StrategyBow implements Strategy{
@Override
public void runStrategy() {
System.out.println("BOW");
}
}
package DesignPattern.strategyPattern;
public class Soldier {
void runContext(Strategy strategy) {
System.out.println("시작");
strategy.runStrategy();
System.out.println("종료");
}
}
package DesignPattern.strategyPattern;
public class Client {
public static void main(String[] args) {
Strategy strategy = null;
Soldier soldier = new Soldier();
strategy = new StrategyGun();
soldier.runContext(strategy);
System.out.println();
strategy = new StrategySword();
soldier.runContext(strategy);
System.out.println();
strategy = new StrategyBow();
soldier.runContext(strategy);
}
}
클라이언트가 콘텍스트에게 전략을 조달한다
=
Client 가 soldier 에게 strategy 하위 클래스를 조달한다
이해가 어려우면 클래스 다이어그램과 시퀀스 다이어그램을 봐보자
전략 패턴은 개방 폐쇄 원칙 ( OCP ) 과 의존 역전 원칙 ( DIP ) 이 적용