Strategy Design Pattern
Technical UniversityBerlin
Winter Semester 2008 2009
M.Shafi Tokhi
Design pattern
● Design patterns are common solutions for software
problems.
● In software engineering, a design pattern is a general
reusable solution to a commonly occurring problem in
software design. A design pattern is not a finished
design that can be transformed directly into code. It is
a description or template for how to solve a problem
that can be used in many different situations.
(Wikipedia)
Design Patterns
● Strategy Design Pattern
● Decorator Design Pattern
● Factory Design Pattern
● Observer Design Pattern
Strategy Design Pattern
● is a particular software design pattern,
whereby algorithms can be selected at
runtime.
● The strategy pattern is useful for situations where it is
necessary to dynamically swap the algorithms used in
an application. The strategy pattern is intended to
provide a means to define a family of algorithms,
encapsulate each one as an object, and make them
interchangeable
public abstract class Vehicle{
public Vehicle(){
}
public void go(){ Problem:
System.out.println(”I am driving Now ”); What Happen if we
}
} have some other
vehicles
with driving , Flying,
public class BMW extends Vehicle{
public BMW(){ Flying Fast
} behaviours?
}
public static void main(String[] args){
BMW bmv = new BMW();
bmW.go();
.
.
.
}
I am driving Now
Overview of Strategy Design pattern
doTask()
{ }
doTask() Solution:
{
overriding code
Strategy Design Pattern
}
doTask()
{
more overriding code
}
Strategy Design Pattern
Your code Algorithm object 1
Algorithm object 2
Algorithm Variable
Algorithm object 3
Algorithm object 4
Algorithm object 5
public interface GoAlgorithm{
public void go();
}
public class GoByDrivingAlgorithm implements GoAlgorithm{
public void go(){
System.out.println("I am driving now..... ");
}
}
public class GoByFlyingAlgorithm implements GoAlgorithm{
public void go(){
System.out.println("I am flying ... ");
}
}
public class GoByFlyingFast implements GoAlgorithm{
public void go(){
System.out.println("I am flying fast... ");
}
}
public abstract class Vehicle{
private GoAlgorithm goAlgorithm;
public Vehicle(){
}
public void setGoAlgorithm(GoAlgorithm algorithm){
goAlgorithm = algorithm;
}
public void go(){
goAlgorithm.go();
}
}
public class BMW extends Vehicle{
public BMW(){
setGoAlgorithm(new GoByDrivingAlgorithm());
}
}
public class MercedesBenz extends Vehicle{
public MercedesBenz(){
setGoAlgorithm(new GoByDrivingAlgorithm());
}
}
public class Helicopter extends Vehicle{
public Helicopter(){
setGoAlgorithm(new GoByFlyingAlgorithm());
}
}
public class Jet extends Vehicle{
public Jet(){
setGoAlgorithm(new GoByFlyingFast());
}
}
Testing..
public class Run{
public static void main(String[] args){
Vehicle v;
System.out.println("starting...");
v = new MercedesBenz();
v.go();
v = new BMW();
v.go();
v = new Helicopter();
v.go();
v = new Jet();
v.go();
}
}
Task For You!
(5 Marks)
● What are design pattrens and why we use
them? (write what you have learned from
this presentation)
● What is Strategy design pattern? Explain
what you have learned so far.