안녕하세요 알통몬입니다. 공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!! 포스팅 내용이 찾아주신 분들께 도움이 되길 바라며 더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^
|
-전략 메서드를 가진 객체
-전략 객체를 사용하는 컨텍스트(전략 객체의 사용자./소비자)
-전략 객체를 생성해 컨텍스트에 주입하는 클라이언트(제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);
}
}
실행 결과는 아시겠죠?
전략 패턴은 템플릿 메서드 패턴과 유사합니다.
같은 문제의 해결책으로 상속을 이용하는 템플릿 메서드 패턴과
객체 주입을 통한 전략 패턴 중 선택/적용할 수 있어요.
전략 패턴은 -클라이언트가 전략을 생성해 전략을 실행할 컨텍스트에 주입하는 패턴-
이라고 한 줄로 정리할 수 있겠습니다.
'개발 etc' 카테고리의 다른 글
mysql between 원하는 날짜 범위의 값 검색, 날짜 범위 검색 방법 sql문 (0) | 2017.04.18 |
---|---|
JAVA 자바 템플릿 콜백 패턴(Template Callback Pattern) (0) | 2017.03.12 |
JAVA 자바 팩터리 메서드 패턴(Factory Method Pattern) (0) | 2017.03.12 |
JAVA 자바 템플릿 메서드 패턴(Template Method Pattern) (0) | 2017.03.12 |
JAVA 자바 싱글턴 패턴(Singleton Pattern) (0) | 2017.03.12 |