STRATEGY 전략 패턴
 - 알고리즘을 교체가능 하게 하는 패턴.
 - 알고리즘의 인터페이스를 정의하고, 각각의 클래스별로 캡슐화 한 후 사용.
 - 결과는 같으나 결과를 만드는 방법이 여러개인 경우 사용.





//Strategy Interface class class Strategy{ public: virtual void AlgorithmInterface() = 0; }; //Strategy Algorithms class ConcreteStrategyA : public Strategy{ public: void AlgorithmInterface() override { cout<<"Call A"<<endl; }; }; class ConcreteStrategyB : public Strategy{ public: void AlgorithmInterface() override { cout<<"Call B"<<endl; }; }; class ConcreteStrategyC : public Strategy{ public: void AlgorithmInterface() override { cout<<"Call C"<<endl; }; }; //Context class Context{ public: Context() : _Strategy(0) {} ~Context() {if(_Strategy) delete _Strategy;} void ChangeStrategy(Strategy* pStrategy){ if(_Strategy) delete _Strategy; _Strategy= pStrategy; } void ContextInerface() { _Strategy->AlgorithmInterface(); } private: Strategy* _Strategy; }; //main int main(){ Context* _Context = new Context(); _Context ->ChangeStrategy(new ConcreteStrategyA()); _Context ->ContextInerface(); _Context ->ChangeStrategy(new ConcreteStrategyB()); _Context ->ContextInerface(); _Context ->ChangeStrategy(new ConcreteStrategyC()); _Context ->ContextInerface(); delete _Context ; return 0; }


적용 예제

//적용 예제 //Strategy Interface class class SortInterface{ public: virtual void DoSort() = 0; }; //Strategy Algorithms class QuickSort : public SortInterface{ public: void DoSort() override { cout<<"QuickSort"<<endl; }; }; class MergeSort : public SortInterface{ public: void DoSort() override { cout<<"MergeSort"<<endl; }; }; class BublleSort: public SortInterface{ public: void DoSort() override { cout<<"BublleSort"<<endl; }; }; //Context class SortManger{ public: SortManger() : _Sort(0) {} ~SortManger() {if(_Sort) delete _Sort;} void DoSort() { _Sort->DoSort(); } void ChangeSort(SortInterface* pSort){ if(_Sort) delete _Sort; _Sort= pSort; } private: SortInterface* _Sort; }; //main int main(){ SortManger* _Sort = new SortManger(); _Sort ->ChangeSort(new QuickSort()); _Sort ->DoSort(); _Sort ->ChangeSort(new MergeSort()); _Sort ->DoSort(); _Sort ->ChangeSort(new BublleSort()); _Sort ->DoSort(); delete _Sort ; return 0; }


+ Recent posts