понеділок, 20 квітня 2015 р.

Strategy pattern





1. identify the aspects of your code that vary and separate them from what stays the same. It can help to implement design principle "what is vary should be encupsulated". Create interfaces



2. implement subclasses


3. create instance variable flyBehavior and quackBehavior


4. create abstract class

public abstract class Duck {

FlyBehavior flyBehavior;
QuackBehavior quackBehavior;

public Duck() {
}

public void setFlyBehavior(FlyBehavior fb) {
flyBehavior = fb;
}

public void setQuackBehavior(QuackBehavior qb) {
quackBehavior = qb;
}

abstract void display();

public void performFly() {
flyBehavior.fly();
}

public void performQuack() {
quackBehavior.quack();
}

public void swim() {
System.out.println("All ducks float, even decoys!");
}
}

4. create subclasses which extends class Duck and implement flyBehavior and quackBehavior

public class RubberDuck extends Duck {

public RubberDuck() {
flyBehavior = new FlyNoWay();
quackBehavior = new Squeak();
}

public void display() {
System.out.println("I'm a rubber duckie");
}
}

5. create main class

public class MiniDuckSimulator {

public static void main(String[] args) {

MallardDuck mallard = new MallardDuck();
RubberDuck rubberDuckie = new RubberDuck();
DecoyDuck decoy = new DecoyDuck();

ModelDuck model = new ModelDuck();

mallard.performQuack();
rubberDuckie.performQuack();
decoy.performQuack();
 
model.performFly();
model.setFlyBehavior(new FlyRocketPowered());
model.performFly();
}
}

В реализации СТРАТЕГИИ, обычно используются два участника:
  • Стратегия — объект, который инкапсулирует алгоритм.
  • Клиент (или Контекст) — объект, который может использовать любую стратегию в стиле plug-and-play «включил и работай».

Немає коментарів:

Дописати коментар