Strategy Pattern은 알고리즘 군을 정의하고 각각을 캡슐화하여 교환해서 사용할 수 있도록 만든다. 바뀌는 부분을 인터페이스로 분리하여 처리하고, 그 인터페이스의 구현체를 바꿈으로서 로직을 변경한다.
(if or switch문으로 분기되는 부분이 있을 때는 strategy pattern을 고려해 보고, 분기되고 속성의 변화에 의해 행동이 바뀌면 state pattern을 고려해 보면 될 것 같다. 동적으로 type code성인 iGame값이 바뀌어야 할때 이 패턴을 사용해야 겠다. 동적으로 바뀌지 않고 불변이면 상속구조도 괜찮다.)
예제) Starcraft와 Mine게임 하는 부분
public interface IGame {
void play();
------------------------------------------------------
public class Starcraft implements IGame {
public void play() {
System.out.println("starcraft 게임중...");
}
------------------------------------------------------
public class Mine implements IGame {
public void play() {
System.out.println("지뢰찾기 게임중");
}
------------------------------------------------------
public class PCGame {
private IGame iGame;
public PCGame(IGame iGame) {
this.iGame = iGame;
}
public void play() {
iGame.play();
}
public IGame getIGame() {
return iGame;
}
public void setIGame(IGame game) {
iGame = game;
}
------------------------------------------------------
public class Client {
public static void main(String[] args) {
PCGame pcGame = new PCGame(new Starcraft());
pcGame.play(); // starcraft 게임중...
pcGame.setIGame(new Mine());
pcGame.play(); // 지뢰찾기 게임중
}