Strategy Pattern Java (System Design)

Kaushik Ghosh
2 min readFeb 28, 2024

--

Using Inheritence in Java we are reducing the Code reusability and its maintainance. But suppose I have 2 classes which is extends from Parent, but same two child classes working type is different but one method is same, so in that case the code will reusability due override condition

So in that case we can use the “Strategy Design Patern” to reduce the same code of reusability.

Writing Procedure:

package kaushik.Strategy;

public interface WritingOption {
public void write();
}
package kaushik.Strategy;

public class BallPenWritingOption implements WritingOption{

@Override
public void write() {
System.out.println("Writing with a ball pen");
}
}
package kaushik.Strategy;

public class GelPenWritingOption implements WritingOption{
@Override
public void write() {
System.out.println("Writing with a gel pen");
}
}
package kaushik.PenType;

import kaushik.Pen;
import kaushik.Strategy.GelPenWritingOption;

public class GelPen extends Pen {
public GelPen() {
super(new GelPenWritingOption());
}
}
package kaushik.PenType;

import kaushik.Pen;
import kaushik.Strategy.BallPenWritingOption;

public class BallPen extends Pen {
public BallPen() {
super(new BallPenWritingOption());
}
}
package kaushik;

import kaushik.Strategy.BallPenWritingOption;
import kaushik.Strategy.WritingOption;

public class Pen {

WritingOption writingOption;
protected Pen(WritingOption writingOption) {
this.writingOption = writingOption;
}
public void write() {
writingOption.write();
}

}
package kaushik;

import kaushik.PenType.BallPen;
import kaushik.PenType.GelPen;

public class Main {
public static void main(String[] args) {
Pen ballPen = new BallPen();
Pen gelPen = new GelPen();
ballPen.write();
gelPen.write();
}
}

Output Will be:

Here, Basicaly happening that is, The in BallPen Class we are intregating the Ball-Pen-Writing Strategy and In GelPen Class we are integrating Gel-Pen-Writing Strategy.So There is no repeation of override code there.The written strategy is being written in the StrategyMethod class.

--

--