DP: strategy

Strategy allows selecting an algorithm’s behavior at runtime. It defines a family of algorithms and makes them interchangeable.

Used in communication protocols, filtering algorithms, motor control strategies, and trading strategies.

  • Swap algorithms at runtime
  • Eliminates complex conditionals

C Example

c
#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

cpp
#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;
}