Você está na página 1de 12

Padro Singleton

Contexto
Algumas classes devem ser instanciadas uma
nica vez:
Um spooler de impresso
Um sistema de arquivos
Um objeto que contm a configurao de um
programa

Como assegurar que uma classe possua


apenas uma instncia e que esta instncia seja
facilmente acessvel?
Uma varivel global deixa a instncia acessvel mas
no inibe a instanciao mltipla

Contexto

Uma melhor soluo: faa com que a


classe em si seja responsvel pela
manuteno da instncia nica
Este o padro Singleton ("que-possuiapenas-um")

Contexto

Use o padro Singleton quando:


Deve haver uma nica instncia de uma
classe e esta instncia deve ser acessada a
partir de um ponto de acesso bem-conhecido

Participantes o Singleton

Define uma operao getInstance() que


permite que clientes acessem sua
instncia nica
um mtodo esttico (class method)

Pode ser responsvel pela criao de sua


instncia nica

Participantes as !
colaboraes
Clientes que acessam a instncia apenas
atravs da operao getInstance() do
Singleton

Benefcios
"
Acesso controlado instncia nica
O singleton tem controle sobre como e
quando clientes acessam a instncia

Vrias classes Singleton (relacionadas ou


no via herana) podem obedecer
mesma interface, permitindo que um
Singleton particular seja escolhido para
trabalhar com uma determinada aplicao
em tempo de execuo
8

Consideraes de
Implementao
Como assegurar que haja uma nica
instncia?
Uma forma de no permitir chamadas ao
construtor

Implementando um
Singleton
public class Algo implements AlgoIF {
private static AlgoIF instanciaUnica = null;
private Algo() {
// o compilador no vai gerar um
// construtor default pblico
}

public static AlgoIF getInstance() {


if (instanciaUnica == null) {
instanciaUnica = new Algo();
}
return instanciaUnica;
}
10

Implementando um
Singleton
public class ClienteDeAlgo {
public static void main(String[] args) {
//

nica forma de obter uma instncia de "Algo"


AlgoIF instaciaDeAlgo = Algo.getInstance();

}
}

11

Singleton com
Factories
Como voc aplicaria o padro Singleton
s fbricas de labirinto?

12

Você também pode gostar