
설명이 부족할 수 있습니다
전략 패턴은 자바의 다형성을 이용해 클라이언트(클래스)가 컨텍스트(인터페이스)를 통해 전략(구현체)를 바꿔가면서 쓰게 하는 개발 방식이다.
아래의 그림을 보면 이해가 쉬울 것이다.

SomeClass 가 Strategy 타입의 변수로 구현체인 StrategyA, StrategyB 를 참조할 수 있게 된다. SomeClass 는 필요에 따라 StrategyA 나 StrategyB 를 바꿔가며 쓸 수 있다.
전략 패턴을 이용해 롤 챔피언들을 바꿔가며 써보겠다.
나의 주 챔이었던 오공, 베인, 이즈리얼을 구현해보자.
Champion 이라는 인터페이스와
Wukong, Vayne, Ezreal 이라는 구현체를 만들고
LOL에서 Champoin 의 전략(구현체) 를 바꿔가면서 써보자.
Champion interface
public interface Champion {
void Q();
void W();
void E();
void R();
}
Wukong class
public class Wukong implements Champion{
@Override
public void Q() {
System.out.println("파쇄격");
}
@Override
public void W() {
System.out.println("분신 전사");
}
@Override
public void E() {
System.out.println("근두운 급습");
}
@Override
public void R() {
System.out.println("회전격");
}
}
Vayne class
public class Vayne implements Champion{
@Override
public void Q() {
System.out.println("구르기");
}
@Override
public void W() {
System.out.println("은화살");
}
@Override
public void E() {
System.out.println("선고");
}
@Override
public void R() {
System.out.println("결전의 시간");
}
}
Ezreal class
public class Ezreal implements Champion{
@Override
public void Q() {
System.out.println("신비한 화살");
}
@Override
public void W() {
System.out.println("정수의 흐름");
}
@Override
public void E() {
System.out.println("비전 이동");
}
@Override
public void R() {
System.out.println("정조준 일격");
}
}
LOL class
public class LOL {
public static void main(String[] args) {
//오공 QWER
Champion champ = new Wukong();
champ.Q();
champ.W();
champ.E();
champ.R();
//결과)
//파쇄격
//분신 전사
//근두운 급습
//회전격
}
}
다른 챔피언을 쓰고싶다면 new Wukong() 부분만 다른 구현체로 바꾸면 된다.
이렇게 공통적인 부분을 뽑아내 인터페이스로 일반화한다음
다형성을 이용해 필요할때 전략을 쉽게 바꿀 수 있다.