Strategy Pattern (padrão de desenho)/Patos

From Wiki**3

Revision as of 09:58, 18 November 2013 by Root (talk | contribs) (Created page with "Duck, Fly, Quack. Comentários em breve. <java5> public abstract class Duck { FlyBehavior flyBehavior; QuackBehavior quackBehavior; public Duck() ...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Duck, Fly, Quack.

Comentários em breve.

<java5>

 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!"); }
}

</java5>

<java5>

public class RubberDuck extends Duck {
       public RubberDuck() {
               flyBehavior = new FlyNoWay();
               quackBehavior = new Squeak();
       }
       public void display() { System.out.println("I'm a rubber duckie"); }
}

</java5>

<java5>

public class RedHeadDuck extends Duck {
       public RedHeadDuck() {
               flyBehavior = new FlyWithWings();
               quackBehavior = new Quack();
       }
       public void display() { System.out.println("I'm a real Red Headed duck"); }
}

</java5>

Comportamento de Voo

Este comportamento está relacionado com a forma de voar do pato: existe uma família de comportamentos de voo. Os elementos desta família podem ser associados a patos, alterando-se desse modo o comportamento do pato em voo.

<java5>

public interface FlyBehavior { public void fly(); }

</java5>

<java5>

public class FlyWithWings implements FlyBehavior {
  public void fly() { System.out.println("I'm flying!!"); }
}

</java5>

<java5>

public class FlyNoWay implements FlyBehavior {
  public void fly() { System.out.println("I can't fly"); }
}

</java5>

<java5>

public class FlyRocketPowered implements FlyBehavior {
  public void fly() { System.out.println("I'm flying with a rocket"); }
}

</java5>

Comportamento de Grasnar

Este comportamento está relacionado com a forma de grasnar do pato: tal como para o voo, existe uma família de comportamentos de grasnar. Os elementos desta família podem ser associados a patos, alterando-se desse modo o comportamento do pato, relativamente à acção de grasnar.

<java5>

public interface QuackBehavior { public void quack(); }

</java5>

<java5>

public class Quack implements QuackBehavior {
  public void quack() { System.out.println("Quack"); }
}

</java5>

<java5>

public class Squeak implements QuackBehavior {
  public void quack() { System.out.println("Squeak"); }
}

</java5>

<java5>

public class MuteQuack implements QuackBehavior {
  public void quack() { System.out.println("<< Silence >>"); }
}

</java5>

Mais informação sobre este exemplo particular pode ser obtida no livro Head First Design Patterns.