Motivação
Singleton 
Motivação 
n Contextos em que só deva existir um único 
objeto de uma classe 
n Mais de uma instância de 
certos objetos podem 
causar problemas na 
execução de um programa 
n Importante quando um 
determinado objeto possui 
muitos recursos
Singleton 
Motivação 
Global 
Acesso único 
Uma maneira de 
garantir que haja 
somente um 
único objeto de 
uma determinada 
classe
Criando um objeto 
n Como fazer para criar um único objeto? 
n new MeuObjeto(); 
n É possível criar outro? 
n Sim 
n Podemos fazer o que se segue?
Singleton 
public class MeuObjeto { 
private MeuObjeto() {} 
} 
n O que significa isso? 
n Existe algum código que possa usar este 
construtor?
Singleton 
public class MeuObjeto { 
public static MeuObjeto getInstance() {} 
} 
n O que isto significa? 
MeuObjeto.getInstance();
Singleton 
n Juntando as 2 coisas 
public class MeuObjeto { 
private MeuObjeto(){} 
public static MeuObjeto getInstance() { 
return new MeuObjeto(); 
} 
}
Singleton 
n Uma outra forma de instanciar um objeto 
MeuObjeto.getInstance();
Exercício – 10min 
n Altere a classe abaixo de forma que ela só possa criar uma 
única instância da classe 
public class MeuObjeto { 
private MeuObjeto(){} 
public static MeuObjeto getInstance() { 
return new MeuObjeto(); 
} 
}
Singleton 
Implementação clássica 
public class Singleton { 
private static Singleton instanciaUnica; 
private Singleton() {} 
public static Singleton getInstance() { 
if (instanciaUnica == null) { 
instanciaUnica = new Singleton(); 
} 
return instanciaUnica; 
} 
}
Singleton 
Implementação clássica 
public class Singleton { 
private static Singleton instanciaUnica; 
private Singleton() {} 
public static Singleton getInstance() { 
if (instanciaUnica == null) { 
instanciaUnica = new Singleton(); 
} 
return instanciaUnica; 
} 
} 
n Uma variável estática para 
garantir uma única instância 
para toda a classe 
n Um construtor privado que 
somente a própria classe tem 
acesso 
n O método getInstance instancia 
o objeto único e o retorna 
n Pode haver outros métodos? 
n Sim
+1 Padrão 
SINGLETON 
O Padrão Singleton garante que uma 
classe possua apenas uma única instância e 
fornece um ponto global de acesso a ela.
Singleton 
Resumindo 
n A classe Singleton gerencia sua única instância 
n Nenhuma outra classe pode criar uma nova 
instância de uma classe Singleton 
n É preciso fazer uso da própria classe para criá-la 
n Ponto de acesso global 
n A própria classe
Diagrama de classes
Aplicabilidade 
n Quando for necessário existir apenas uma 
única instância de uma classe, e essa 
instância deve dar acesso aos clientes através 
de um ponto bem conhecido 
n Quando a única instância tiver de ser 
extensível através de subclasses, 
possibilitando aos clientes usarem uma 
instância estendida sem alterar o seu código
Participantes 
n Singleton 
n Define uma operação getInstance() que 
permite aos clientes acessarem sua única 
instância. getInstance é uma operação de 
classe, ou seja estática
Colaborações 
n Os clientes acessam uma instância Singleton 
unicamente pela operação getInstance do 
Singleton

Singleton - Padrão de Projeto

  • 2.
  • 3.
    Singleton Motivação nContextos em que só deva existir um único objeto de uma classe n Mais de uma instância de certos objetos podem causar problemas na execução de um programa n Importante quando um determinado objeto possui muitos recursos
  • 4.
    Singleton Motivação Global Acesso único Uma maneira de garantir que haja somente um único objeto de uma determinada classe
  • 5.
    Criando um objeto n Como fazer para criar um único objeto? n new MeuObjeto(); n É possível criar outro? n Sim n Podemos fazer o que se segue?
  • 6.
    Singleton public classMeuObjeto { private MeuObjeto() {} } n O que significa isso? n Existe algum código que possa usar este construtor?
  • 7.
    Singleton public classMeuObjeto { public static MeuObjeto getInstance() {} } n O que isto significa? MeuObjeto.getInstance();
  • 8.
    Singleton n Juntandoas 2 coisas public class MeuObjeto { private MeuObjeto(){} public static MeuObjeto getInstance() { return new MeuObjeto(); } }
  • 9.
    Singleton n Umaoutra forma de instanciar um objeto MeuObjeto.getInstance();
  • 10.
    Exercício – 10min n Altere a classe abaixo de forma que ela só possa criar uma única instância da classe public class MeuObjeto { private MeuObjeto(){} public static MeuObjeto getInstance() { return new MeuObjeto(); } }
  • 11.
    Singleton Implementação clássica public class Singleton { private static Singleton instanciaUnica; private Singleton() {} public static Singleton getInstance() { if (instanciaUnica == null) { instanciaUnica = new Singleton(); } return instanciaUnica; } }
  • 12.
    Singleton Implementação clássica public class Singleton { private static Singleton instanciaUnica; private Singleton() {} public static Singleton getInstance() { if (instanciaUnica == null) { instanciaUnica = new Singleton(); } return instanciaUnica; } } n Uma variável estática para garantir uma única instância para toda a classe n Um construtor privado que somente a própria classe tem acesso n O método getInstance instancia o objeto único e o retorna n Pode haver outros métodos? n Sim
  • 13.
    +1 Padrão SINGLETON O Padrão Singleton garante que uma classe possua apenas uma única instância e fornece um ponto global de acesso a ela.
  • 14.
    Singleton Resumindo nA classe Singleton gerencia sua única instância n Nenhuma outra classe pode criar uma nova instância de uma classe Singleton n É preciso fazer uso da própria classe para criá-la n Ponto de acesso global n A própria classe
  • 15.
  • 16.
    Aplicabilidade n Quandofor necessário existir apenas uma única instância de uma classe, e essa instância deve dar acesso aos clientes através de um ponto bem conhecido n Quando a única instância tiver de ser extensível através de subclasses, possibilitando aos clientes usarem uma instância estendida sem alterar o seu código
  • 17.
    Participantes n Singleton n Define uma operação getInstance() que permite aos clientes acessarem sua única instância. getInstance é uma operação de classe, ou seja estática
  • 18.
    Colaborações n Osclientes acessam uma instância Singleton unicamente pela operação getInstance do Singleton