Abstract Factory Pattern (padrão de desenho): Difference between revisions
From Wiki**3
No edit summary |
|||
| (4 intermediate revisions by the same user not shown) | |||
| Line 17: | Line 17: | ||
Interfaces e implementações dos vários intervenientes no ambiente de jogo. | Interfaces e implementações dos vários intervenientes no ambiente de jogo. | ||
< | <source lang="java"> | ||
interface Obstáculo { void acção(); } | interface Obstáculo { void acção(); } | ||
| Line 27: | Line 27: | ||
public void acção() { System.out.println("espírito maligno"); } | public void acção() { System.out.println("espírito maligno"); } | ||
} | } | ||
</ | </source> | ||
< | <source lang="java"> | ||
interface Jogador { void interageCom(Obstáculo ob); } | interface Jogador { void interageCom(Obstáculo ob); } | ||
| Line 45: | Line 45: | ||
} | } | ||
} | } | ||
</ | </source> | ||
=== Fábricas abstractas === | === Fábricas abstractas === | ||
Interface e implementações das várias fábricas abstractas. | Interface e implementações das várias fábricas abstractas. | ||
< | <source lang="java"> | ||
// Interface (fábrica abstracta) | // Interface (fábrica abstracta) | ||
| Line 57: | Line 57: | ||
Obstáculo fazObstáculo(); | Obstáculo fazObstáculo(); | ||
} | } | ||
</ | </source> | ||
< | <source lang="java"> | ||
// Fábricas concretas | // Fábricas concretas | ||
| Line 71: | Line 71: | ||
public Obstáculo fazObstáculo() { return new EspíritoMaligno(); } | public Obstáculo fazObstáculo() { return new EspíritoMaligno(); } | ||
} | } | ||
</ | </source> | ||
=== Ambiente de Jogo === | === Ambiente de Jogo === | ||
< | <source lang="java"> | ||
class AmbienteDeJogo { | class AmbienteDeJogo { | ||
| Line 92: | Line 92: | ||
} | } | ||
</ | </source> | ||
=== Aplicação de Teste === | === Aplicação de Teste === | ||
< | <source lang="java"> | ||
public class AbstractFactoryPattern { | public class AbstractFactoryPattern { | ||
| Line 109: | Line 110: | ||
// Testes | // Testes | ||
ambiente1.joga(); // A Kitty encontrou um puzzle divertido! | ambiente1.joga(); // A Kitty encontrou um puzzle divertido! | ||
ambiente2.joga(); // Mestre de | ambiente2.joga(); // Mestre de Kung-fu enfrenta espírito maligno | ||
} | } | ||
} | } | ||
</ | </source> | ||
[[category:Ensino]] | [[category:Ensino]] | ||
[[category:PO]] | [[category:PO]] | ||
[[category:PO Exemplos]] | [[category:PO Exemplos]] | ||
Latest revision as of 16:49, 14 November 2019
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 em Java
Ambiente de jogo, jogador, obstáculo.
Intervenientes no ambiente de jogo
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();
}
}
Fábricas abstractas
Interface e implementações das várias fábricas abstractas.
// Interface (fábrica abstracta)
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 Kung-fu enfrenta espírito maligno
}
}