- 동일 계열의 알고리즘군을 정의하고, 각각의 알고리즘을 캡슐화하며, 이들을 상호 교환이 가능하도록 만드는 패턴
- 행동이 조금씩 다를 뿐 관련된 많은 클래스들일 존재할 때
- 알고리즘의 변형이 필요할 때
- 사용자가 몰라야 하는 데이터를 사용하는 알고리즘이 있을 때
- 하나의 클래스가 많은 행동을 정의하고, 이런 행동들이 그 클래스의 연산 안에서 복잡한 다중 조건문의 모습을 취할 때
- 동일 계열의 관련 알고리즘군이 생김
- 서브클래싱을 사용하지 않는 대안임
- 조건문을 없앨 수 있음
- 구현의 선택이 가능함
- 서로 다른 전략을 알아야 함
- Strategy 객체와 Context 객체 사이에 의사소통 오버헤드가 있음
- 객체 수가 증가함
Strategy 클래스
class Strategy { public: virtual void Algorithm() = 0; };
ConcreteStrategyA, ConcreteStrategyB 클래스
class ConcreteStrategyA : public Strategy { public: void Algorithm() { cout << "ConcreteStrategyA" << endl; }; };
class ConcreteStrategyB : public Strategy { public: void Algorithm() { cout << "ConcreteStrategyB" << endl; }; };
Context 클래스
class Context { public: Context() {}; void SetStrategy(Strategy* pStrategy) { m_pStrategy = pStrategy; }; void Do() { m_pStrategy->Algorithm(); }; private: Strategy* m_pStrategy; };
실행 부분
void main() { Context* pContext = new Context(); Strategy* pStrategyA = new ConcreteStrategyA(); pContext->SetStrategy(pStrategyA); pContext->Do(); Strategy* pStrategyB = new ConcreteStrategyB(); pContext->SetStrategy(pStrategyB); pContext->Do(); delete pStrategyA; delete pStrategyB; delete pContext; }
UML - class 다이어그램
- GoF의 디자인 패턴(개정판) 재사용성을 지닌 객체지향 소프트웨어의 핵심요소
댓글 없음:
댓글 쓰기
참고: 블로그의 회원만 댓글을 작성할 수 있습니다.