18

Singleton - Padrão de Projeto

Embed Size (px)

DESCRIPTION

Apresentação sobre o padrão de projeto Singleton.

Citation preview

Page 1: Singleton - Padrão de Projeto
Page 2: Singleton - Padrão de Projeto

Motivação

Page 3: Singleton - Padrão de Projeto

Singleton Motivação

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

n  Contextos em que só deva existir um único objeto de uma classe

Page 4: Singleton - Padrão de Projeto

Singleton Motivação

Global

Acesso único

Uma maneira de garantir que haja somente um único objeto de uma determinada classe

Page 5: Singleton - Padrão de Projeto

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?

Page 6: Singleton - Padrão de Projeto

Singleton public class MeuObjeto {

private MeuObjeto() {}

} n  O que significa isso? n  Existe algum código que possa usar este

construtor?

Page 7: Singleton - Padrão de Projeto

Singleton public class MeuObjeto {

public static MeuObjeto getInstance() {}

}

n  O que isto significa? MeuObjeto.getInstance();

Page 8: Singleton - Padrão de Projeto

Singleton n  Juntando as 2 coisas public class MeuObjeto { private MeuObjeto(){} public static MeuObjeto getInstance() { return new MeuObjeto(); } }

Page 9: Singleton - Padrão de Projeto

Singleton n  Uma outra forma de instanciar um objeto MeuObjeto.getInstance();

Page 10: Singleton - Padrão de Projeto

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(); } }

Page 11: Singleton - Padrão de Projeto

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; } }

Page 12: Singleton - Padrão de Projeto

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

Page 13: Singleton - Padrão de Projeto

+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.

Page 14: Singleton - Padrão de Projeto

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

Page 15: Singleton - Padrão de Projeto

Diagrama de classes

Page 16: Singleton - Padrão de Projeto

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

Page 17: Singleton - Padrão de Projeto

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

Page 18: Singleton - Padrão de Projeto

Colaborações n  Os clientes acessam uma instância Singleton

unicamente pela operação getInstance do Singleton