设计模式学习心得--Template Method模式

发布时间:2014-10-23 23:28:46
来源:分享查询网

参考链接: http://sourcemaking.com/design_patterns/template_method 主要功能: 提供一种方法,可以根据实际的需求,修改某个特定算法中的其中某些步骤。 设计方法: 在基类某个函数的执行过程中,使用虚函数的方法来替代可能会被替换的步骤,而在该基类的子类中,重写这些函数即可。 #include <iostream> #include <time.h> using namespace std; class AbstractSort { // Shell sort public: void sort(int v[], int n) { for (int g = n / 2; g > 0; g /= 2) for (int i = g; i < n; i++) for (int j = i - g; j >= 0; j -= g) if (needSwap(v[j], v[j + g])) doSwap(v[j], v[j + g]); } private: virtual int needSwap(int, int) = 0; void doSwap(int &a, int &b) { int t = a; a = b; b = t; } }; class SortUp: public AbstractSort { /* virtual */ int needSwap(int a, int b) { return (a > b); } }; class SortDown: public AbstractSort { /* virtual */ int needSwap(int a, int b) { return (a < b); } }; int main() { const int NUM = 10; int array[NUM]; srand((unsigned)time(0)); for (int i = 0; i < NUM; i++) { array[i] = rand() % 10+1; cout << array[i] << ' '; } cout << '\n'; AbstractSort *sortObjects[] = { new SortUp, new SortDown }; sortObjects[0]->sort(array, NUM); for (int u = 0; u < NUM; u++) cout << array[u] << ' '; cout << '\n'; sortObjects[1]->sort(array, NUM); for (int d = 0; d < NUM; d++) cout << array[d] << ' '; cout << '\n'; system("pause"); }

返回顶部
查看电脑版