사용자 도구
관리
로그인
추적:
이 문서는 읽기 전용입니다. 원본을 볼 수는 있지만 바꿀 수는 없습니다. 문제가 있다고 생각하면 관리자에게 문의하세요.
====== Strategy 패턴 ====== ===== 타입 ===== Behavioral Pattern ===== 문제 ===== ===== 해결 ===== ===== 클래스 다이어그램 ===== {{:programming:design_pattern:strategy.png|}} ===== 예제 ===== <file cpp strategy.cpp> #include <iostream> using namespace std; class StrategyInterface { public: virtual void execute() const = 0; }; class ConcreteStrategyA: public StrategyInterface { public: virtual void execute() const { cout << "Called ConcreteStrategyA execute method" << endl; } }; class ConcreteStrategyB: public StrategyInterface { public: virtual void execute() const { cout << "Called ConcreteStrategyB execute method" << endl; } }; class ConcreteStrategyC: public StrategyInterface { public: virtual void execute() const { cout << "Called ConcreteStrategyC execute method" << endl; } }; class Context { private: StrategyInterface * strategy_; public: explicit Context(StrategyInterface *strategy):strategy_(strategy) { } void set_strategy(StrategyInterface *strategy) { strategy_ = strategy; } void execute() const { strategy_->execute(); } }; int main(int argc, char *argv[]) { ConcreteStrategyA concreteStrategyA; ConcreteStrategyB concreteStrategyB; ConcreteStrategyC concreteStrategyC; Context contextA(&concreteStrategyA); Context contextB(&concreteStrategyB); Context contextC(&concreteStrategyC); contextA.execute(); // output: "Called ConcreteStrategyA execute method" contextB.execute(); // output: "Called ConcreteStrategyB execute method" contextC.execute(); // output: "Called ConcreteStrategyC execute method" contextA.set_strategy(&concreteStrategyB); contextA.execute(); // output: "Called ConcreteStrategyB execute method" contextA.set_strategy(&concreteStrategyC); contextA.execute(); // output: "Called ConcreteStrategyC execute method" return 0; } </file> ===== 참고 ===== http://en.wikibooks.org/wiki/C%2B%2B_Programming/Code/Design_Patterns#Strategy
문서 도구
문서 보기
이전 판
역링크
PDF로 내보내기
맨 위로
PDF Export
내용으로 건너뛰기
OBG WiKi
사이트 도구
검색
최근 바뀜
미디어 관리자
사이트맵