Strategy Pattern (padrão de desenho)/Galinha com fome

From Wiki**3

< Strategy Pattern (padrão de desenho)
Revision as of 12:06, 18 November 2013 by Root (talk | contribs) (Solução)

Este exercício saiu no teste de 2012/01/30.

Problema

Considere o seguinte programa em Java: <java5> public class Chicken {

 private Stomach _stomach = new Hungry();
 public void eat()   { _stomach.eat();   }
 public void sleep() { _stomach.sleep(); }
 public void setMood(Stomach stomach) { _stomach = stomach; }

}

public abstract class Stomach {

 protected Stomach() { System.out.println("Hmmm..."); }
 public void eat()   { System.out.println("..."); }
 public void sleep() { System.out.println("..."); }

}

public class Hungry extends Stomach {

 public Hungry()     { System.out.println("I'm hungry!!"); }
 public void eat()   { System.out.println("Eating..."); }
 public void sleep() { System.out.println("I'm too hungry to sleep!!"); }

}

public class Sated extends Stomach {

 public Sated()      { System.out.println("I'm sleepy!!"); }
 public void eat()   { System.out.println("I'm not hungry..."); }
 public void sleep() { System.out.println("ZzZz..."); }

}

public class Farm {

 public static void main(String args[]) {
   Chicken chicken = new Chicken();
   chicken.eat();
   chicken.setMood(new Sated());
   chicken.sleep();
   chicken.setMood(new Hungry());
   chicken.sleep();
 }

} </java5>

  1. Que resultado se obtém quando se executa o seguinte programa? (represente mudanças de linha com \n)
  2. Que padrão de desenho é usado no programa?

Solução

O resultado obtido é o seguinte (trivial):

Hmmm...\nI'm hungry!!\nEating...\nHmmm...\nI'm sleepy!!\nZzZz...\nHmmm...\nI'm hungry!!\nI'm too hungry to sleep!!

O pradrão usado é o Strategy (corresponde à delegação de comportamento no conceito Stomach).