Strategy Pattern — UML, Code & When to Use
Swap the algorithm, not the code around it
When one task has several interchangeable implementations — payment methods, compression schemes, routing
rules — the Strategy pattern puts each behind a common interface and lets the client pick one
at runtime. It replaces a growing if/else (or switch) ladder with polymorphism, and is the
textbook way to honour the Open/Closed Principle: add a new strategy without touching existing code.
Code
interface PaymentStrategy { void pay(int amountCents); }
class CreditCardPay implements PaymentStrategy { public void pay(int a){ /* ... */ } }
class PayPalPay implements PaymentStrategy { public void pay(int a){ /* ... */ } }
class Checkout { // the Context
private PaymentStrategy strategy; // swappable
Checkout(PaymentStrategy s){ this.strategy = s; }
void confirm(int total){ strategy.pay(total); }
}
new Checkout(new PayPalPay()).confirm(4999); // choose at runtime
When to use — and what it's NOT
- Use when you have multiple ways to do one thing and want to choose/extend without editing a conditional ladder.
- vs State: identical structure, different intent — State's objects represent a mode and transition between themselves; Strategy's are stateless algorithms chosen by the client.
- vs Template Method: Template Method varies steps via inheritance (compile-time); Strategy varies the whole algorithm via composition (runtime) — "favour composition over inheritance."
Pitfalls
- Over-engineering: for two stable cases an
ifis fine; introduce Strategy when the set grows or changes. - The client must know the strategies to choose — often paired with a Factory.
Takeaways
- Strategy = interchangeable algorithms behind an interface, chosen at runtime (composition).
- Replaces conditional ladders; satisfies Open/Closed.
- Same shape as State; differs in intent. Don't over-apply.
Re-authored for this guide; UML diagram hand-authored as SVG. Follows GoF and refactoring.guru. See also: SOLID (Open/Closed), Behavioral patterns, State.
🤖 Don't fully get this? Learn it with Claude
Stuck on Strategy Pattern — UML, Code & When to Use? Open Claude, copy a block below, and it'll teach you this exact concept — visually and interactively.
Build the mental picture, not memorization.
I just read a lesson on **Strategy Pattern — UML, Code & When to Use** (OO & Low-Level Design) and want to truly understand it. Explain Strategy Pattern — UML, Code & When to Use from first principles using ONE vivid real-world analogy and a visual mental model — draw it as ASCII art or a clear step-by-step diagram — with a concrete example using real numbers. Then ask me one question to check I got the mental picture, and wait for my reply. If you're unsure or a claim isn't standard, say so and reason from first principles instead of guessing.
Socratic — adapts to where you're stuck.
Teach me **Strategy Pattern — UML, Code & When to Use** interactively. Ask me ONE guiding question at a time, wait for my answer, and adapt to my confusion — build the idea with me step by step instead of explaining it all at once. If you're unsure or a claim isn't standard, say so and reason from first principles instead of guessing.
Active recall exposes what you missed.
Quiz me on **Strategy Pattern — UML, Code & When to Use** with 5 questions, easy to tricky, ONE at a time. Tell me if each answer is right; at the end, explain clearly what I got wrong and why. If you're unsure or a claim isn't standard, say so and reason from first principles instead of guessing.
Intuition + hook + flashcards for long-term memory.
Help me remember **Strategy Pattern — UML, Code & When to Use** for the long term: give the one-sentence intuition, a memorable hook/mnemonic, a tiny worked example, and 3 active-recall flashcards (Q -> A). If you're unsure or a claim isn't standard, say so and reason from first principles instead of guessing.