개발 etc

JAVA 자바 전략패턴(Strategy Pattern)

알통몬_ 2017. 3. 12. 20:55
반응형


안녕하세요 알통몬입니다.

공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^

 

전략 패턴을 구성하는 세 가지 요소는 꼭 기억하셔야 해요.

-전략 메서드를 가진 객체

-전략 객체를 사용하는 컨텍스트(전략 객체의 사용자./소비자)

-전략 객체를 생성해 컨텍스트에 주입하는 클라이언트(제3자, 전략 객체의 공급자)

 

클라이언트는 다양한 전략 중 하나를 선택해 생성 후 컨텍스트에 주입해요.

군인이 있고 군인이 사용할 무기, 그리고 무기를 공급해주는 보급장교가 있다고 할 때

무기는 전략이 되고 군인은 컨텍스트, 보급장교는 클라이언트가 됩니다.


바로 예제로 보겠습니다.

예제1)

package strategyPattern;


public interface Strategy {

public abstract void runStrategy();

}

예제2)

package strategyPattern;


public class StrategyGun implements Strategy {

@Override

public void runStrategy() {

System.out.println("탕, 타당, 타다당");

}

}

예제3)

package strategyPattern;


public class StrategySword implements Strategy {

@Override

public void runStrategy() {

System.out.println("챙.. 채쟁챙 챙챙");

}

}

예제4)

package strategyPattern;


public class StrategyBow implements Strategy {

@Override

public void runStrategy() {

System.out.println("슝.. 쐐액.. 쇅, 최종 병기");

}

}

예제5)

package strategyPattern;


public class Soldier {

void runContext(Strategy strategy) {

System.out.println("전투 시작");

strategy.runStrategy();

System.out.println("전투 종료");

}

}

예제6)

package strategyPattern;


public class Client {

public static void main(String[] args) {

Strategy strategy = null;

Soldier rambo = new Soldier();


// 총을 람보에게 전달해서 전투를 수행하게 한다.

strategy = new StrategyGun();

rambo.runContext(strategy);


System.out.println();


// 검을 람보에게 전달해서 전투를 수행하게 한다.

strategy = new StrategySword();

rambo.runContext(strategy);


System.out.println();


// 활을 람보에게 전달해서 전투를 수행하게 한다.

strategy = new StrategyBow();

rambo.runContext(strategy);

}

}


실행 결과는 아시겠죠?


전략 패턴은 템플릿 메서드 패턴과 유사합니다. 

같은 문제의 해결책으로 상속을 이용하는 템플릿 메서드 패턴과 

객체 주입을 통한 전략 패턴 중 선택/적용할 수 있어요.


전략 패턴은 -클라이언트가 전략을 생성해 전략을 실행할 컨텍스트에 주입하는 패턴-

이라고 한 줄로 정리할 수 있겠습니다.

반응형