Difference between revisions of "Strategy Pattern (padrão de desenho)/Patos"

From Wiki**3

< Strategy Pattern (padrão de desenho)
(Created page with "Duck, Fly, Quack. Comentários em breve. <java5> public abstract class Duck { FlyBehavior flyBehavior; QuackBehavior quackBehavior; public Duck() ...")
 
 
Line 3: Line 3:
 
Comentários em breve.
 
Comentários em breve.
  
<java5>
+
<source lang="java">
 
   public abstract class Duck {
 
   public abstract class Duck {
 
         FlyBehavior  flyBehavior;
 
         FlyBehavior  flyBehavior;
Line 19: Line 19:
 
         public void swim() { System.out.println("All ducks float, even decoys!"); }
 
         public void swim() { System.out.println("All ducks float, even decoys!"); }
 
  }
 
  }
</java5>
+
</source>
  
<java5>
+
<source lang="java">
 
  public class RubberDuck extends Duck {
 
  public class RubberDuck extends Duck {
 
         public RubberDuck() {
 
         public RubberDuck() {
Line 29: Line 29:
 
         public void display() { System.out.println("I'm a rubber duckie"); }
 
         public void display() { System.out.println("I'm a rubber duckie"); }
 
  }
 
  }
</java5>
+
</source>
  
<java5>
+
<source lang="java">
 
  public class RedHeadDuck extends Duck {
 
  public class RedHeadDuck extends Duck {
 
         public RedHeadDuck() {
 
         public RedHeadDuck() {
Line 39: Line 39:
 
         public void display() { System.out.println("I'm a real Red Headed duck"); }
 
         public void display() { System.out.println("I'm a real Red Headed duck"); }
 
  }
 
  }
</java5>
+
</source>
  
 
=== Comportamento de Voo ===
 
=== Comportamento de Voo ===
Line 45: Line 45:
 
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.
 
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>
+
<source lang="java">
 
  public interface FlyBehavior { public void fly(); }
 
  public interface FlyBehavior { public void fly(); }
</java5>
+
</source>
  
<java5>
+
<source lang="java">
 
  public class FlyWithWings implements FlyBehavior {
 
  public class FlyWithWings implements FlyBehavior {
 
   public void fly() { System.out.println("I'm flying!!"); }
 
   public void fly() { System.out.println("I'm flying!!"); }
 
  }
 
  }
</java5>
+
</source>
  
<java5>
+
<source lang="java">
 
  public class FlyNoWay implements FlyBehavior {
 
  public class FlyNoWay implements FlyBehavior {
 
   public void fly() { System.out.println("I can't fly"); }
 
   public void fly() { System.out.println("I can't fly"); }
 
  }
 
  }
</java5>
+
</source>
  
<java5>
+
<source lang="java">
 
  public class FlyRocketPowered implements FlyBehavior {
 
  public class FlyRocketPowered implements FlyBehavior {
 
   public void fly() { System.out.println("I'm flying with a rocket"); }
 
   public void fly() { System.out.println("I'm flying with a rocket"); }
 
  }
 
  }
</java5>
+
</source>
  
 
=== Comportamento de Grasnar ===
 
=== Comportamento de Grasnar ===
Line 71: Line 71:
 
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.
 
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>
+
<source lang="java">
 
  public interface QuackBehavior { public void quack(); }
 
  public interface QuackBehavior { public void quack(); }
</java5>
+
</source>
  
<java5>
+
<source lang="java">
 
  public class Quack implements QuackBehavior {
 
  public class Quack implements QuackBehavior {
 
   public void quack() { System.out.println("Quack"); }
 
   public void quack() { System.out.println("Quack"); }
 
  }
 
  }
</java5>
+
</source>
  
<java5>
+
<source lang="java">
 
  public class Squeak implements QuackBehavior {
 
  public class Squeak implements QuackBehavior {
 
   public void quack() { System.out.println("Squeak"); }
 
   public void quack() { System.out.println("Squeak"); }
 
  }
 
  }
</java5>
+
</source>
  
<java5>
+
<source lang="java">
 
  public class MuteQuack implements QuackBehavior {
 
  public class MuteQuack implements QuackBehavior {
 
   public void quack() { System.out.println("<< Silence >>"); }
 
   public void quack() { System.out.println("<< Silence >>"); }
 
  }
 
  }
</java5>
+
</source>
  
 
Mais informação sobre este exemplo particular pode ser obtida no livro Head First Design Patterns.
 
Mais informação sobre este exemplo particular pode ser obtida no livro Head First Design Patterns.

Latest revision as of 15:56, 15 November 2018

Duck, Fly, Quack.

Comentários em breve.

  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!"); }
 }
 public class RubberDuck extends Duck {
        public RubberDuck() {
                flyBehavior = new FlyNoWay();
                quackBehavior = new Squeak();
        }
        public void display() { System.out.println("I'm a rubber duckie"); }
 }
 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"); }
 }

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.

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

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.

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

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