Skip to content

Latest commit

History

13 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Gerenciador de impressão

Uso do padrão de criação Singleton para que, ao tentar instânciar mais de uma de impresora, o Gerenciador de impressão acabe sempre obtendo a mesma instância da classe Impressora. Desta forma, cada página de impressão é enviada para a mesma impressora de destino.

Objetivo

Demonstrar que este padrão permite que uma classe instancie apenas um único objeto Impressora. Sendo um exemplo simplificado de um gerenciador de impressão real, que deve acionar a mesma impressora para realiziar alguma impressão.

Antes do Singleton

Método main:

Impressorap1 = newImpressora();
Impressorap2 = newImpressora();
Impressorap3 = newImpressora();
Impressorap4 = newImpressora(); System.out.println("Endereço de memória de p1: "+p1);
System.out.println("Endereço de memória de p2: "+p2);
System.out.println("Endereço de memória de p3: "+p3);
System.out.println("Endereço de memória de p4: "+p4);

Saída:

Endereçodememóriadep1: modelo.Impressora@15db9742Endereçodememóriadep2: modelo.Impressora@6d06d69cEndereçodememóriadep3: modelo.Impressora@7852e922Endereçodememóriadep4: modelo.Impressora@4e25154f

Cada tentativa de instanciar uma Impressora acabou retornando um endereço de memória diferente, com isto podemos observar que foram criadas quatro instâncias.

Usando Singleton

Classe Impressora no padrão Singleton:

publicclassImpressora {
privatestaticImpressoraimpressora;
privateImpressora() {
}
publicstaticImpressoragetInstance() { if(impressora == null) {
impressora = newImpressora();
}
returnimpressora;
}
}

Torna-se o construtor private, cria-se um atributo private e static do tipo da classe, pois será referenciado por um método public e também static chamado getInstance(). Este método analisa se o atributo impressora é null.

Caso seja, irá instanciar a classe Impressora e atribuir a impressora e então retorna este atributo. Caso impressora ja pussua o objeto Impressora, o método irá apenas retornar o atributo.

Método main:

Impressorap1 = Impressora.getInstance();
Impressorap2 = Impressora.getInstance();
Impressorap3 = Impressora.getInstance();
Impressorap4 = Impressora.getInstance();
System.out.println("Endereço de memória de p1: "+p1);
System.out.println("Endereço de memória de p2: "+p2);
System.out.println("Endereço de memória de p3: "+p3);
System.out.println("Endereço de memória de p4: "+p4);

Saída:

Endereçodememóriadep1: modelo.Impressora@15db9742Endereçodememóriadep2: modelo.Impressora@15db9742Endereçodememóriadep3: modelo.Impressora@15db9742Endereçodememóriadep4: modelo.Impressora@15db9742

Para as quatro tentativas de instanciar a classe Impressora, pode-se observar que o endereço de memória é sempre o mesmo. Isto significa que, uma vez instanciado, o objeto a ser manipulado é sempre o mesmo.

About

Gerenciador de impressão que faz uso do padrão de projeto (design patterns) Singleton.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages