常见设计模式的解析和实现(C++)之十六-Strategy模式
http://sourcemaking.com/design_patterns/strategy/cpp/1http://www.vincehuston.org/dp/strategy.html
template<typename STRATEGY>
class Stat {
public:
void readVector( int v[], int n ) {
m_impl.sort( v, n );
m_min = v[0];
m_max = v[n-1];
m_median = v[n/2];
}
...
private:
STRATEGY m_impl;
};
class SortBubble {
void sort( int v[], int n ) {
...
class SortShell {
void sort( int v[], int n ) {
...
int main( void ) {
const int NUM = 9;
int array[NUM];
srand( time(0) );
cout << "Vector: ";
for (int i=0; i < NUM; ++i) {
array[i] = rand() % 9 + 1;
cout << array[i] << ' ';
}
cout << '\n';
Stat<SortBubble> one;
one.readVector( array, NUM );
cout << "min is " << one.getMin() << ", max is " << one.getMax()
<< ", median is " << one.getMedian() << '\n';
Stat<SortShell> two;
two.readVector( array, NUM );
cout << "min is " << two.getMin() << ", max is " << two.getMax()
<< ", median is " << two.getMedian() << '\n';
}
// Vector: 8 3 1 9 7 2 2 9 7
// Bubble: 1 2 2 3 7 7 8 9 9
// min is 1, max is 9, median is 7
// Shell: 1 2 2 3 7 7 8 9 9
// min is 1, max is 9, median is 7