Abstract Factory Pattern (padrão de desenho): Difference between revisions
From Wiki**3
No edit summary |
No edit summary |
||
| Line 1: | Line 1: | ||
O padrão "abstract factory" fornece uma forma de encapsular um conjunto de fabricas (factories) individuais correspondentes a um contexto comum. | O padrão "abstract factory" fornece uma forma de encapsular um conjunto de fabricas (factories) individuais correspondentes a um contexto comum. | ||
| Line 12: | Line 10: | ||
Ambiente de jogo, jogador, obstaculo. | Ambiente de jogo, jogador, obstaculo. | ||
=== Interfaces e implementações dos vários intervenientes no ambiente de jogo === | |||
interface Obstáculo { void acção(); } | |||
class Puzzle implements Obstáculo { | |||
public void acção() { System.out.println("um puzzle divertido!"); } | |||
} | |||
class EspÃritoMaligno implements Obstáculo { | |||
public void acção() { System.out.println("espÃrito maligno"); } | |||
} | |||
interface Jogador { void interageCom(Obstáculo ob); } | |||
class Kitty implements Jogador { | |||
public void interageCom(Obstáculo o) { | |||
System.out.print("A Kitty encontrou "); | |||
o.acção(); | |||
} | |||
} | |||
class MestreKungFu implements Jogador { | |||
public void interageCom(Obstáculo o) { | |||
System.out.print("Mestre de Kung-fu luta contra "); | |||
o.acção(); | |||
} | |||
} | |||
=== Interface e implementações das várias fábricas abstractas === | |||
// Interface | |||
interface FábricaDeJogos { | |||
Jogador fazJogador(); | |||
Obstáculo fazObstáculo(); | |||
} | |||
// Fábricas concretas | |||
class PuzzlesKitties implements FábricaDeJogos { | |||
public Jogador fazJogador() { return new Kitty(); } | |||
public Obstáculo fazObstáculo() { return new Puzzle(); } | |||
} | |||
class DesmembraMata implements FábricaDeJogos { | |||
public Jogador fazJogador() { return new MestreKungFu(); } | |||
public Obstáculo fazObstáculo() { return new EspÃritoMaligno(); } | |||
} | |||
=== Ambiente de Jogo === | |||
class AmbienteDeJogo { | |||
private FábricaDeJogos _fa; | |||
private Jogador _jo; | |||
private Obstáculo _ob; | |||
public AmbienteDoJogo(FábricaDeJogos fábrica) { | |||
_fa = fábrica; | |||
_jo = fábrica.fazJogador(); | |||
_ob = fábrica.fazObstáculo(); | |||
} | |||
public void joga() { | |||
_jo.interageCom(_ob); | |||
} | |||
} | |||
=== Aplicação de Teste === | |||
public class AbstractFactoryPattern { | |||
public static void main(String args[]) { | |||
// Fábricas dos elementos | |||
FábricaDeJogos fkp = new PuzzlesKitties(); | |||
FábricaDeJogos fdm = new DesmembraMata(); | |||
// Ambientes de jogo | |||
AmbienteDeJogo ambiente1 = new AmbienteDeJogo(fkp); | |||
AmbienteDeJogo ambiente2 = new AmbienteDeJogo(fdm); | |||
// Testes | |||
ambiente1.joga(); // A Kitty encontrou um puzzle divertido! | |||
ambiente2.joga(); // Mestre de King-fu enfrenta espÃrito maligno | |||
} | |||
} | |||
[[category:PO 2005/2006]] | [[category:PO 2005/2006]] | ||
Revision as of 19:31, 21 November 2006
O padrão "abstract factory" fornece uma forma de encapsular um conjunto de fabricas (factories) individuais correspondentes a um contexto comum.
Estrutura
O padrão abstract factory tem a seguinte estrutura de classes:
Exemplo
Ambiente de jogo, jogador, obstaculo.
Interfaces e implementações dos vários intervenientes no ambiente de jogo
interface Obstáculo { void acção(); }
class Puzzle implements Obstáculo {
public void acção() { System.out.println("um puzzle divertido!"); }
}
class EspÃritoMaligno implements Obstáculo {
public void acção() { System.out.println("espÃrito maligno"); }
}
interface Jogador { void interageCom(Obstáculo ob); }
class Kitty implements Jogador {
public void interageCom(Obstáculo o) {
System.out.print("A Kitty encontrou ");
o.acção();
}
}
class MestreKungFu implements Jogador {
public void interageCom(Obstáculo o) {
System.out.print("Mestre de Kung-fu luta contra ");
o.acção();
}
}
Interface e implementações das várias fábricas abstractas
// Interface
interface FábricaDeJogos {
Jogador fazJogador();
Obstáculo fazObstáculo();
}
// Fábricas concretas
class PuzzlesKitties implements FábricaDeJogos {
public Jogador fazJogador() { return new Kitty(); }
public Obstáculo fazObstáculo() { return new Puzzle(); }
}
class DesmembraMata implements FábricaDeJogos {
public Jogador fazJogador() { return new MestreKungFu(); }
public Obstáculo fazObstáculo() { return new EspÃritoMaligno(); }
}
Ambiente de Jogo
class AmbienteDeJogo {
private FábricaDeJogos _fa;
private Jogador _jo;
private Obstáculo _ob;
public AmbienteDoJogo(FábricaDeJogos fábrica) {
_fa = fábrica;
_jo = fábrica.fazJogador();
_ob = fábrica.fazObstáculo();
}
public void joga() {
_jo.interageCom(_ob);
}
}
Aplicação de Teste
public class AbstractFactoryPattern {
public static void main(String args[]) {
// Fábricas dos elementos
FábricaDeJogos fkp = new PuzzlesKitties();
FábricaDeJogos fdm = new DesmembraMata();
// Ambientes de jogo
AmbienteDeJogo ambiente1 = new AmbienteDeJogo(fkp);
AmbienteDeJogo ambiente2 = new AmbienteDeJogo(fdm);
// Testes
ambiente1.joga(); // A Kitty encontrou um puzzle divertido!
ambiente2.joga(); // Mestre de King-fu enfrenta espÃrito maligno
}
}