Strategy Pattern

Strategy Pattern Java Design Pattern Tutorial
Strategy Pattern: defines a family of algorithms, encapsulates each one, and makes them interchangeable. Strategy lets the algorithm vary independently from clients that use it.

Example

Car.java
package com.strategypattern.example;

public abstract class Car {
 EngineType engineType;
 BodyStyle bodyStyle;

 public void setEngineType(EngineType engineType) {
  this.engineType = engineType;
 }

 public void setBodyStyle(BodyStyle bodyStyle) {
  this.bodyStyle = bodyStyle;
 }

 public void drive() {
  engineType.engine();
  bodyStyle.body();
 }

}
EngineType.java
package com.strategypattern.example;

public interface EngineType {
 public void engine();
}
BodyStyle.java
package com.strategypattern.example;

public interface BodyStyle {
 public void body();
}
GasolineEngine.java
package com.strategypattern.example;

public class GasolineEngine implements EngineType{

 @Override
 public void engine() {
  System.out.println("Engine Type : Gasoline");
 }

}
DieselEngine.java
package com.strategypattern.example;

public class DieselEngine implements EngineType{

 @Override
 public void engine() {
  System.out.println("Engine Type : Diesel");
 }

}
CompactSedan.java
package com.strategypattern.example;

public class CompactSedan implements BodyStyle{

 @Override
 public void body() {
  System.out.println("Body Style : Compact Sedan");
 }

}
Hatchback.java
package com.strategypattern.example;

public class Hatchback implements BodyStyle{

 @Override
 public void body() {
  System.out.println("Body Style : Hatchback");
 }

}
HondaCivic.java
package com.strategypattern.example;

public class HondaCivic extends Car {
 public HondaCivic(){
  engineType = new GasolineEngine();
  bodyStyle = new CompactSedan();
 }
 
 public String toString(){
  return "Honda Civic";
 }
}

SuzukiSwift.java
package com.strategypattern.example;

public class SuzukiSwift extends Car {
 public SuzukiSwift(){
  engineType = new GasolineEngine();
  bodyStyle = new Hatchback();
 }
 
 public String toString(){
  return "Suzuki Swift";
 }
}
CarTestDrive.java
package com.strategypattern.example;

public class CarTestDrive {
 public static void main(String[] args) {
  Car suzukiSwift = new SuzukiSwift();
  System.out.println("You are Driving " + suzukiSwift);
  suzukiSwift.drive();
  
  Car hondaCivic = new HondaCivic();
  System.out.println("You are Driving " + hondaCivic);
  hondaCivic.drive();
  //Hand Civic is giving low mileage on Gasoline,so Engine Type changed to Diesel
  hondaCivic.setEngineType(new DieselEngine());
  hondaCivic.drive();
 
 }
}



Home

No comments:

Post a Comment