In the design pattern study we have to know some vocabulary as:
-Abstraction: a concept or idea not associates with any instance.
-Encapsulation: which is the restriction to access some of the object’s components or bundling of data with the method operating in data
-Polymorphism: Is the ability to create a variable, a function or an object that has more than one form.
-Inheritence: which is an “IS A” relationship generally used as “extends” in OOP.
Design Patterns principles like:
-Identify the aspects of your application that vary and separate them from those what stays the same;
-Program to an interface not to an implementation
-Favor composition over inheritence
The Strategy Pattern defines a family of algorithm, encapsulates each one and makes them interchangeable. Strategy lets the algorithm vary independently from client that uses it.
Here is a small application of this Pattern, The Duck program.
public class FlyingWithWings implements FlyBehavior { public void fly(){ System.out.println("I am flying with wings"); } }
public class FlyNoWay implements FlyBehavior { public void fly(){ System.out.println("I can't fly"); } }
public interface FlyBehavior { public void fly(); }
public class Quack implements QuackBehavior { public void quack(){ System.out.println("I am quacking"); } }
public class MuteQuack { public void quack(){ System.out.println("Mute quack"); } }
public class Squeak { public void quack(){ System.out.println("I am squeaking"); } }
public interface QuackBehavior { public void quack(); }
public abstract class Duck { FlyBehavior flybehavior; QuackBehavior quackbehavior; public void performFly(){ flybehavior.fly(); } public void performQuack(){ quackbehavior.quack(); } }
public class MallardDuck extends Duck { public MallardDuck(){ quackbehavior = new Quack(); flybehavior = new FlyNoWay(); } public void display(){ System.out.println("I am a real mallardDuck"); } }
public class MiniDuckSimulator { public static void main(String[] args) { Duck mallard = new MallardDuck(); mallard.performFly(); mallard.performQuack(); } }