Introduction
A strategic design pattern is a behavioural design pattern in which the behaviour of the object is encapsulated with a common function name.
Where to use Strategic design pattern?
When different customer have a common strategy, (common operation name), but a different action to perform; then we can use a strategic design pattern.
Why to use Strategic design pattern?
As we discussed previously customers have common operation name to perform, so that we can share a common interface to all customers to perform their actions as per there need.
Players in this pattern
- Strategy: It defines contract with common operation.
- ConcreteStrategy : It implements contact defined by Strategy.
- Product: It fulfil customer requirements using ConcreteStrategy objects by referring Strategy contract.
We will see strategic design pattern with an example:
Problem definition
Define a common operation for a student to access different actions, such as addition, subtraction, multiplication, and division.
Players in this case:
- Strategy : IOperator
- ConcreteStrategy: AddOperator, SubtractOperator, MultiplyOperator, DivisionOperator.
- Product : Calculator
Below is the IOperator contract which defined a common operation called ExecuteOperation
- package com.sdp;
- public interface IOperator {
- void executeOperation(int a, int b);
- }
Below are the concrete operators which implement a contract defined by IOperator:
- package com.sdp;
- public class AddOperator implements IOperator {
- @Override
- public void executeOperation(int a, int b) {
- System.out.println("AddOperator result: " + (a + b));
- }
- }
- package com.sdp;
- public class SubtractOperator implements IOperator {
- @Override
- public void executeOperation(int a, int b) {
- System.out.println("SubtractOperator result: " + (a - b));
- }
- }
- package com.sdp;
- public class MultiplyOperator implements IOperator {
- @Override
- public void executeOperation(int a, int b) {
- System.out.println("MultiplyOperator result: " + (a * b));
- }
- }
- package com.sdp;
- public class DivisionOperator implements IOperator {
- @Override
- public void executeOperation(int a, int b) {
- System.out.println("DivisionOperator result: " + (a / b));
- }
- }


Join the conversation! Your thoughts help the community grow.