Skip to content

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

License

Notifications You must be signed in to change notification settings

Gwolner/Singleton

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 

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:

Impressora p1 = new Impressora();
Impressora p2 = new Impressora();
Impressora p3 = new Impressora();
Impressora p4 = new Impressora();		

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ço de memória de p1: modelo.Impressora@15db9742
Endereço de memória de p2: modelo.Impressora@6d06d69c
Endereço de memória de p3: modelo.Impressora@7852e922
Endereço de memória de p4: 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:

public class Impressora {

  private static Impressora impressora;
	
  private Impressora() {

  }
	
  public static Impressora getInstance() { 
    if(impressora == null) {
      impressora = new Impressora();
    }

    return impressora;
  }
}

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:

Impressora p1 = Impressora.getInstance();
Impressora p2 = Impressora.getInstance();
Impressora p3 = Impressora.getInstance();
Impressora p4 = 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ço de memória de p1: modelo.Impressora@15db9742
Endereço de memória de p2: modelo.Impressora@15db9742
Endereço de memória de p3: modelo.Impressora@15db9742
Endereço de memória de p4: 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

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages