Strategy Pattern
The 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
Example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | public interface IBehaviourStrategy { public void run(); public void fly(); public void wild(); public void swim(); } ========== public class PetAnimalBehaviour implements IBehaviourStrategy{ @Override public void run() { System.out.println("I can run medium-fast."); } @Override public void fly() { System.out.println("\nI cannot Fly."); } @Override public void wild() { System.out.println("My Behaviour never seems wild."); } @Override public void swim() { System.out.println("I can swim short distance."); } } =========== public class WildAnimalBehaviour implements IBehaviourStrategy { @Override public void run() { System.out.println("I can Run very fast"); } @Override public void fly() { System.out.println("\nI cannot Fly. But I run like I fly."); } @Override public void wild() { System.out.println("I am wild and Healthy"); } @Override public void swim() { System.out.println("I can swim long river"); } } ========== public class Cow extends Animal{ Cow(){ behaviour = new PetAnimalBehaviour(); } } ========== public class Tiger extends Animal { Tiger(){ behaviour = new WildAnimalBehaviour(); } } ========== public abstract class Animal { IBehaviourStrategy behaviour; Animal(){} public void checkBehaviours(){ behaviour.fly(); behaviour.run(); behaviour.swim(); behaviour.wild(); } } ========== public class StrategyPatternFlight { public static void main(String[] bag){ Animal wildAnimals = new Tiger(); wildAnimals.checkBehaviours(); Animal cow = new Cow(); cow.checkBehaviours(); } } ========== |