Used in communication protocols, filtering algorithms, motor control strategies, and trading strategies.
- Swap algorithms at runtime
- Eliminates complex conditionals
C Example
#include <stdio.h>
typedef int (*Operation)(int, int);
int add(int a, int b) { return a + b; }
int multiply(int a, int b) { return a * b; }
int calculate(Operation op, int a, int b) {
return op(a, b);
}
int main() {
printf("%d\n", calculate(add, 2, 3));
printf("%d\n", calculate(multiply, 2, 3));
}
C++ Example
#include <iostream>
using namespace std;
class Strategy {
public:
virtual int execute(int a, int b) = 0;
};
class Add : public Strategy {
public:
int execute(int a,int b) override { return a+b; }
};
class Multiply : public Strategy {
public:
int execute(int a,int b) override { return a*b; }
};
class Calculator {
Strategy* strategy;
public:
void setStrategy(Strategy* s) { strategy = s; }
int compute(int a,int b){ return strategy->execute(a,b); }
};
int main() {
Calculator calc;
Add add; Multiply mul;
calc.setStrategy(&add);
cout << calc.compute(2,3) << endl;
calc.setStrategy(&mul);
cout << calc.compute(2,3) << endl;
}