Strategy Design Pattern Implementation

Behavioral patterns define how objects interact and ditsribute responsibilities. The Strategy pattern encapsulates algorithms within interchangeable objects, enabling runtime selection of difefrent behaviors.

Pattern Components

The Strategy pattern consists of three core elements:

  1. Strategy Interface: Defines the common contract for all algorithms
  2. Concrete Strategies: Implement specific algorithm variations
  3. Context: Maintains a strategy reference and executes it

Basic Implementation

Define the strategy interface:

public interface Computation {
    int performCalculation();
}

Implement concrete strategies:

public class BasicComputation implements Computation {
    @Override
    public int performCalculation() {
        System.out.println("Executing primary algorithm");
        return 1;
    }
}

public class AdvancedComputation implements Computation {
    @Override
    public int performCalculation() {
        System.out.println("Executing secondary algorithm");
        return 2;
    }
}

Create the context class:

public class AlgorithmExecutor {
    private Computation computation;
    
    public AlgorithmExecutor(Computation computation) {
        this.computation = computation;
    }
    
    public void runAlgorithm() {
        computation.performCalculation();
    }
}

Practical Application: Reward Distribution

Consider a system distributing rewards using different allocation methods:

public class RewardPool {
    public int remainingParticipants;
    public int totalAmount;
    
    public RewardPool(int participants, int amount) {
        remainingParticipants = participants;
        totalAmount = amount;
    }
}

Define the distribution strategy:

public interface DistributionMethod {
    List<Integer> allocateFunds(RewardPool pool);
}

Implement equal distribution strategy:

public class EqualDistribution implements DistributionMethod {
    @Override
    public List<Integer> allocateFunds(RewardPool pool) {
        List<Integer> allocations = new ArrayList<>();
        int baseAmount = pool.totalAmount / pool.remainingParticipants;
        int remainder = pool.totalAmount % pool.remainingParticipants;
        
        for (int i = 0; i < pool.remainingParticipants; i++) {
            allocations.add(baseAmount);
        }
        allocations.set(0, allocations.get(0) + remainder);
        return allocations;
    }
}

Implement randomized distribution strategy:

public class RandomizedDistribution implements DistributionMethod {
    @Override
    public List<Integer> allocateFunds(RewardPool pool) {
        List<Integer> allocations = new ArrayList<>(Collections.nCopies(pool.remainingParticipants, 0));
        Random randomizer = new Random();
        
        for (int i = 0; i < pool.totalAmount; i++) {
            int index = randomizer.nextInt(pool.remainingParticipants);
            allocations.set(index, allocations.get(index) + 1);
        }
        return allocations;
    }
}

Pattern Benefits

  • Eliminates complex conditional statements
  • Enables runtime algorithm switching
  • Simplifies extension through new strategy implementations

Pattern Limitations

  • Increased number of classes when managing numerous strategies
  • Potential exposure of implementation details through context

Tags: Strategy Pattern Design Patterns java Behavioral Patterns

Posted on Wed, 24 Jun 2026 16:39:59 +0000 by freedomsam