După cum se vede în exemplu de mai sus, avem o clasă MyClass care are o metodă ce sortează un vector. Alături, avem o altă clasă de tip interfață ce conține o metodă sort(); care va fi suprascrisă mai târziu de către cele 3 clase ce implementează această interfață. Astfel în proiectul nostru avem o clasă ce conține modalități de sortare separate de obiectul de sortat, evitând astfel duplicarea codului în cazul în care dorim să mai folosim una dintre metodele de sortare în altă situație.
Acest șablon este folosit deseori în situații ca
- atunci când putem folosi mai mulți algoritmi pentru o operație (vezi cazul de mai sus).
- atunci când într-o clasă sunt definite mai multe comportamente (switch statements), Strategy oferă posibilitatea de a restrânge acele instrucțiuni de control prin implementarea sa.
- atunci când dorim să evităm duplicarea codului.
Mai jos aveți un exemplu de implementare a acestui șablon (mai precis cum funcționează acest șablon la nivel de cod).
#include using namespace std; class SortAlg{ public: SortAlg(); ~SortAlg(); virtual void sort(); }; class MergeSort : public SortAlg{ public: MergeSort(); ~MergeSort(); void sort(); }; void MergeSort::sort(){ ... // se implementeaza functia pentru merge sort; ... } class QuickSort : public SortAlg{ public: QuickSort(); ~QuickSort(); void sort(); }; void QuickSort::sort(){ ... // se implementeaza functia pentru quick sort; ... } class BubbleSort : public SortAlg{ public: BubbleSort(); ~BubbleSort(); void sort(); }; void BubbleSort::sort(){ ... // se implementeaza functia pentru bubble sort ... } class MyClass{ public: MyClass(); ~MyClass(); void sortArray(int); private: SortAlg *sortAlg; int *array; }; void MyClass::sortArray(int x){ ... // in loc de a avea un switch in functie de care se alegea // variata de sortare pentru array-ul nostru, // acum avem doar o singura instructiune de folosit this->sortAlg->sort(); ... }
No comments:
Post a Comment