csc 313 advanced programming topics n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Lecture 3: Strategy Pattern –or– Bringing a Knife to a Gunfight PowerPoint Presentation
Download Presentation
Lecture 3: Strategy Pattern –or– Bringing a Knife to a Gunfight

Loading in 2 Seconds...

play fullscreen
1 / 20

Lecture 3: Strategy Pattern –or– Bringing a Knife to a Gunfight - PowerPoint PPT Presentation


  • 50 Views
  • Uploaded on

CSC 313 – Advanced Programming Topics. Lecture 3: Strategy Pattern –or– Bringing a Knife to a Gunfight. Bested by Lilliputians. Bested by Lilliputians. Bested by Lilliputians. quack behavior. fly behavior. Bested by Lilliputians. quack behavior. fly behavior.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Lecture 3: Strategy Pattern –or– Bringing a Knife to a Gunfight' - leigh-simpson


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
bested by lilliputians2
Bested by Lilliputians

quack behavior

fly behavior

bested by lilliputians3
Bested by Lilliputians

quack behavior

fly behavior

  • Lot of short ones beats a big, tall one
implementing a strategy
Implementing a Strategy

public interface FlyBehavior {public void fly();

}

public class UseJets implements FlyBehavior {public void fly() {System.out.println(“Vrooom”);}

}

public class Wings implements FlyBehavior {public void fly() {System.out.println(“Band On the Run”);}

}

implementing a strategy1
Implementing a Strategy

public interface FlyBehavior {public void fly();

}

public class UseJets implements FlyBehavior {public void fly() {System.out.println(“Vrooom”);}

}

public class Wings implements FlyBehavior {public void fly() {System.out.println(“Band On the Run”);}

}

using a strategy
Using a Strategy

public interface FlyBehavior {public void fly();

}

public abstractclass Duck {private FlyBehaviorflyBehavior;public Duck(FlyBehaviorf) { flyBehavior = f; }public void fly() { flyBehavior.fly(); }

}

public class PaulMcCartney extends Duck {public PaulMcCartney() { super(new Wings()); }

}

public class DecoyDuck extends Duck {public DecoyDuck() { super(newNoFly()); }

}

strategy pattern
Strategy Pattern
  • Define supertype for family of algorithms
    • interface used nearly always for this
    • Entire family relies on method signature specified
  • Make algorithms interchangeable
    • Separate class encapsulates each algorithm
  • Algorithm definition split from its use
    • Add algorithms easily with no changes to code
    • New environments can also reuse algorithms
zen the art of programming
Zen & the Art of Programming

Identify and isolate what will change from what stays the same

  • What is being done split from how to do it

Program to a concept, not a class

  • Client cannot know what Strategy does
  • Strategy limited to working only with parameters
changing your strategy
Changing your Strategy
  • Strategy fixed only when client calls it
    • Determined by value of field when the call is made
  • Set & change strategies at any time
    • Client does not know implementation to rely on it
    • Simply reassign field whenever it should change
  • All the Client subclasses may not be needed
    • If only Strategy differs, just change field’s value
    • At worst, subclasses limited to a constructor
reusing a strategy
Reusing a Strategy

public class JetFighter {private FlyBehaviorflyBehavior;public JetFighter() {flyBehavior = new UseJets();}public void fly() { flyBehavior.fly();}

}

reusing a strategy1
Reusing a Strategy

public class JetFighter {private FlyBehaviorflyBehavior;public JetFighter() {flyBehavior = new UseJets();}public void fly() {flyBehavior.fly();}

}

Thanks to the Strategy Pattern, I had more time for FarmVille!

zen art of programming
Zen & Art of Programming

Favor composition over inheritance

  • Composition is far easier to spell
tools are they worth it
Tools: Are They Worth It?
  • Good in correct environments & for correct uses
tools are they worth it1
Tools: Are They Worth It?
  • Good in correct environments & for correct uses
  • Become an abomination in other situations
tools are they worth it2
Tools: Are They Worth It?
  • Good in correct environments & for correct uses
  • Become an abomination in other situations
making tools work
Making Tools Work
  • Use inheritance…
    • …to have class expand concepts in superclass
    • …not add or modify behavior that is inherited
  • Use Strategy Pattern…
    • …for single concept with multiple behaviors
zen the art of programming1
Zen & the Art of Programming

Favor composition over inheritance

  • Inheritance has problems
    • Specify when written;cannot change dynamically
    • Limits use & re-use of classes to original concept
    • Makes adding & mixing functionality difficult
  • Composition imperfect also
    • Can make debugging more difficult
    • Requires more classes & interfaces to work
    • With composition, optimizations may not occur
for next lecture
For Next Lecture
  • Read pages 26 - 32
    • How do you talk about a program?
    • What do you write in your documentation?
    • What do wish others documentation would say?
    • What makes for good design?
    • Ever seen beautiful code? What made it pretty?