VOOZH about

URL: https://www.geeksforgeeks.org/system-design/strategy-pattern-set-1/

⇱ Strategy Design Pattern - GeeksforGeeks


  • Courses
  • Tutorials
  • Interview Prep

Strategy Design Pattern

Last Updated : 14 May, 2026

The Strategy Design Pattern is a behavioral pattern that defines a group of related algorithms, encapsulates each one in a separate class, and makes them interchangeable. It allows the algorithm to vary independently from the client that uses it, enabling behavior changes at runtime without altering existing code.

  • Encapsulates different algorithms into separate strategy classes, allowing dynamic selection or switching at runtime.
  • Promotes flexibility by reducing complex conditional logic and making code easier to maintain.

Example: A payment system where a user (client) selects a payment method, and the system (context) applies a strategy like Credit Card, UPI, or PayPal to process the payment.

👁 Strategy-design-pattern
Strategy Design Pattern

In the Diagram

  • The Client interacts with the Context and decides which strategy to use.
  • The Context does not implement the algorithm itself but delegates the task to a selected Strategy (A, B, or C).
  • Different strategies can be switched easily without changing the client or context, ensuring flexibility.

Real-Life Software Applications

Some real-world examples where the Strategy Pattern is commonly used are:

  • Multiple Payment Methods: E-commerce platforms use different payment strategies (Credit Card, PayPal, UPI, etc.), each with its own processing logic. The system selects the appropriate strategy at runtime based on user choice.
  • File Compression Tools: Applications provide multiple compression options (ZIP, GZIP, TAR), allowing users to choose the desired compression strategy dynamically.

Components

The Strategy Design Pattern consists of key components that work together to define and use interchangeable algorithms.

👁 components_of_strategy_design_pattern
Components

1. Context

Acts as an intermediary between the client and the strategy, delegating tasks to the selected strategy.

  • Holds a reference to a strategy object and uses it to perform operations.
  • Allows switching strategies without changing its own code.

2. Strategy Interface

Defines a common interface that all concrete strategies must implement.

  • Ensures consistency so all strategies are interchangeable.
  • Promotes flexibility by decoupling context from implementations.

3. Concrete Strategies

Provide specific implementations of the strategy interface with different algorithms or behaviors.

  • Encapsulate the actual logic of each algorithm.
  • Can be selected and replaced based on requirements.

4. Client

Responsible for selecting and configuring the appropriate strategy for the context.

  • Decides which strategy to use based on the problem.
  • Passes the chosen strategy to the context for execution.

Working

The Strategy pattern works by delegating a specific task to interchangeable algorithm classes.

  • A Strategy interface defines a common method for all algorithms.
  • Concrete strategy classes implement this interface with different behaviors.
  • The context class holds a reference to a strategy object.
  • At runtime, the client selects or changes the strategy, and the context uses it to perform the task.

Uses

The Strategy pattern is used when an application needs to choose different behaviors or algorithms dynamically based on context.

  • Selecting different algorithms at runtime (e.g., payment methods, sorting strategies)
  • Eliminating large conditional statements (if-else or switch cases)
  • Making behavior easily extendable without modifying existing code

Implementation Example

Problem Statement

Consider a sorting application where we need to sort a list of integers. However, the sorting algorithm to be used may vary depending on factors such as the size of the list and the desired performance characteristics.

Challenges Without Using Strategy Pattern:

  • Limited Flexibility: Implementing sorting algorithms directly within the main sorting class can make the code inflexible. Adding new sorting algorithms or changing existing ones would require modifying the main class, which violates the Open/Closed Principle.
  • Code Duplication: Without a clear structure, you may end up duplicating sorting logic to handle different algorithms.
  • Hard-Coded Logic: Implementing sorting logic directly within the main sorting class can make the code rigid and difficult to extend or modify.

Benefits of Using the Strategy Pattern to solve above challenges

Here's how the Strategy Pattern helps:

  • Code Reusability: By encapsulating sorting algorithms into separate strategy classes, you can reuse these strategies across different parts of the system. This reduces code duplication and promotes maintainability.
  • Flexibility and Extensibility: The Strategy Pattern makes it simple to adapt or add new sorting algorithms without changing the existing code. Since each strategy is independent, it is possible to change or expand it without impacting other system components.
  • Separation of Concerns: The Strategy Pattern separates sorting logic into distinct strategy classes, which encourages a clear division of responsibilities. As a result, the code is easier to test, and maintain.
👁 class_diagram_of_strategy_design_pattern_2
Class Diagram

This example shows the practical application of the design pattern using code.

1. Context(SortingContext)

2. Strategy Interface(SortingStrategy)

3. Concrete Strategies

4. Client Component

Complete code for the above example


Output
Sorting using Bubble Sort
Sorting using Merge Sort
Sorting using Quick Sort

Advantages

This pattern improves flexibility and maintainability by separating behavior from the main logic.

  • Promotes open/closed principle by allowing new strategies to be added easily
  • Makes code cleaner and easier to maintain
  • Enables runtime behavior changes without code modification

Limitations

While flexible, the pattern can introduce additional complexity in the application design.

  • Increases the number of classes and objects in the system.
  • Clients need to understand and select the appropriate strategy implementation.
  • May cause slight performance overhead due to extra object creation and method calls.
Comment
Article Tags:

Explore