* 개요
오브젝트에서 변하는 부분과 변하지 않는 부분을 구분하고, 변하는 부분을 특정 알고리즘 군으로 정의하고 알고리즘 군을 캡슐화 하여, 교환해서 사용할 수 있도록 한다.
Strategy Pattern 을 사용하면 Client 와는 별개로 알고리즘을 변경할 수 있다.
Template Method Pattern 이 상속을 이요하여 변하는 부분을 처리했다면, Strategy Pattern 은 구성을 이용한다. Strategy Pattern 은 변하는 부분을 인터페이스로 분리하여, 그 구현체를 변경함으로써 로직을 변경한다. Template Method Pattern 에서는 공개되는 부분이 template method 를 가지고 있는 class 이지만, Strategy Pattern 에서 공개되는 부분은 인터페이스를 사용하는 클래스(Context라 명)이다.
* 구조
- Strategy : 모든 교체가능한 전략들을 위한 interface 를 선언. Context 는 strategy를 사용한다.
- ConcreteStrategy : 각각의 알고리즘을 구현
- Context : strategy 에 대한 reference 를 가지고, ConcreteStrategy 가 설정됨.
* Sample