Abstract Factory Pattern (padrão de desenho): Difference between revisions
From Wiki**3
No edit summary |
|||
| Line 1: | Line 1: | ||
{{TOCright}} | |||
O padrão "abstract factory" fornece uma forma de encapsular um conjunto de | O padrão "abstract factory" fornece uma forma de encapsular um conjunto de fábricas (''factories'') individuais correspondentes a um contexto comum. | ||
==Estrutura== | ==Estrutura== | ||
| Line 10: | Line 10: | ||
==Exemplo== | ==Exemplo== | ||
Ambiente de jogo, jogador, | Ambiente de jogo, jogador, obstáculo. | ||
=== | === Intervenientes no ambiente de jogo === | ||
Interfaces e implementações dos vários intervenientes no ambiente de jogo. | |||
<java5> | |||
interface Obstáculo { void acção(); } | interface Obstáculo { void acção(); } | ||
| Line 20: | Line 23: | ||
} | } | ||
class | class EspíritoMaligno implements Obstáculo { | ||
public void acção() { System.out.println(" | public void acção() { System.out.println("espírito maligno"); } | ||
} | } | ||
</java5> | |||
<java5> | |||
interface Jogador { void interageCom(Obstáculo ob); } | interface Jogador { void interageCom(Obstáculo ob); } | ||
| Line 39: | Line 44: | ||
} | } | ||
} | } | ||
</java5> | |||
=== | === Fábricas abstractas === | ||
// Interface | Interface e implementações das várias fábricas abstractas. | ||
<java5> | |||
// Interface (fábrica abstracta) | |||
interface FábricaDeJogos { | interface FábricaDeJogos { | ||
| Line 48: | Line 56: | ||
Obstáculo fazObstáculo(); | Obstáculo fazObstáculo(); | ||
} | } | ||
</java5> | |||
<java5> | |||
// Fábricas concretas | // Fábricas concretas | ||
| Line 58: | Line 68: | ||
class DesmembraMata implements FábricaDeJogos { | class DesmembraMata implements FábricaDeJogos { | ||
public Jogador fazJogador() { return new MestreKungFu(); } | public Jogador fazJogador() { return new MestreKungFu(); } | ||
public Obstáculo fazObstáculo() { return new | public Obstáculo fazObstáculo() { return new EspíritoMaligno(); } | ||
} | } | ||
</java5> | |||
=== Ambiente de Jogo === | === Ambiente de Jogo === | ||
<java5> | |||
class AmbienteDeJogo { | class AmbienteDeJogo { | ||
| Line 80: | Line 91: | ||
} | } | ||
</java5> | |||
=== Aplicação de Teste === | === Aplicação de Teste === | ||
<java5> | |||
public class AbstractFactoryPattern { | public class AbstractFactoryPattern { | ||
| Line 97: | Line 108: | ||
// Testes | // Testes | ||
ambiente1.joga(); // A Kitty encontrou um puzzle divertido! | ambiente1.joga(); // A Kitty encontrou um puzzle divertido! | ||
ambiente2.joga(); // Mestre de King-fu enfrenta | ambiente2.joga(); // Mestre de King-fu enfrenta espírito maligno | ||
} | } | ||
} | } | ||
</java5> | |||
[[category:OOP]] | [[category:OOP]] | ||
[[category:Teaching]] | [[category:Teaching]] | ||
Revision as of 11:03, 1 October 2010
O padrão "abstract factory" fornece uma forma de encapsular um conjunto de fábricas (factories) individuais correspondentes a um contexto comum.
Estrutura
O padrão abstract factory tem a seguinte estrutura de classes:
Exemplo
Ambiente de jogo, jogador, obstáculo.
Intervenientes no ambiente de jogo
Interfaces e implementações dos vários intervenientes no ambiente de jogo.
<java5>
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"); }
}
</java5>
<java5>
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();
}
}
</java5>
Fábricas abstractas
Interface e implementações das várias fábricas abstractas. <java5>
// Interface (fábrica abstracta)
interface FábricaDeJogos {
Jogador fazJogador();
Obstáculo fazObstáculo();
}
</java5>
<java5>
// 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(); }
}
</java5>
Ambiente de Jogo
<java5>
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);
}
}
</java5>
Aplicação de Teste
<java5>
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
}
}
</java5>