SlideShare una empresa de Scribd logo
1 de 18
Descargar para leer sin conexión
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

Más contenido relacionado

La actualidad más candente

Java orientação a objetos (associacao, composicao, agregacao)
Java   orientação a objetos (associacao, composicao, agregacao)Java   orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)Armando Daniel
 
Padroes De Projeto
Padroes De ProjetoPadroes De Projeto
Padroes De Projetoejdn1
 
Curso de OO com C# - Parte 03 - Plataforma .NET
Curso de OO com C# - Parte 03 - Plataforma .NETCurso de OO com C# - Parte 03 - Plataforma .NET
Curso de OO com C# - Parte 03 - Plataforma .NETLeonardo Melo Santos
 
Curso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetosCurso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetosLeonardo Melo Santos
 
Java 09 Heranca Reescrita Polimorfismo
Java 09 Heranca Reescrita PolimorfismoJava 09 Heranca Reescrita Polimorfismo
Java 09 Heranca Reescrita PolimorfismoRegis Magalhães
 
Java orientação a objetos (variaveis de instancia e metodos)
Java   orientação a objetos (variaveis de instancia e metodos)Java   orientação a objetos (variaveis de instancia e metodos)
Java orientação a objetos (variaveis de instancia e metodos)Armando Daniel
 
DevFest 2012 - Esquartejando sua Activity com Fragments
DevFest 2012 - Esquartejando sua Activity com FragmentsDevFest 2012 - Esquartejando sua Activity com Fragments
DevFest 2012 - Esquartejando sua Activity com FragmentsSuelen Carvalho
 
5507 os principais design patterns
5507   os principais design patterns5507   os principais design patterns
5507 os principais design patternsAndre Baltieri
 
Java - Aula 4 - Sobrecarga de construtores, UML e Herança
Java - Aula 4 - Sobrecarga de construtores, UML e HerançaJava - Aula 4 - Sobrecarga de construtores, UML e Herança
Java - Aula 4 - Sobrecarga de construtores, UML e HerançaMoises Omena
 
HERANÇA - Programação Orientada a Objetos JAVA
HERANÇA - Programação Orientada a Objetos JAVAHERANÇA - Programação Orientada a Objetos JAVA
HERANÇA - Programação Orientada a Objetos JAVAAparicio Junior
 

La actualidad más candente (20)

Java orientação a objetos (associacao, composicao, agregacao)
Java   orientação a objetos (associacao, composicao, agregacao)Java   orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)
 
Padroes De Projeto
Padroes De ProjetoPadroes De Projeto
Padroes De Projeto
 
POO - 10 - Herança
POO - 10 - HerançaPOO - 10 - Herança
POO - 10 - Herança
 
Curso de OO com C# - Parte 03 - Plataforma .NET
Curso de OO com C# - Parte 03 - Plataforma .NETCurso de OO com C# - Parte 03 - Plataforma .NET
Curso de OO com C# - Parte 03 - Plataforma .NET
 
Java - Boas práticas
Java - Boas práticasJava - Boas práticas
Java - Boas práticas
 
Curso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetosCurso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetos
 
JAVA - Orientação a Objetos
JAVA - Orientação a ObjetosJAVA - Orientação a Objetos
JAVA - Orientação a Objetos
 
Java 09 Heranca Reescrita Polimorfismo
Java 09 Heranca Reescrita PolimorfismoJava 09 Heranca Reescrita Polimorfismo
Java 09 Heranca Reescrita Polimorfismo
 
Paradigma Orientado a Objeto
Paradigma Orientado a ObjetoParadigma Orientado a Objeto
Paradigma Orientado a Objeto
 
POO - 06 - Encapsulamento
POO - 06 - EncapsulamentoPOO - 06 - Encapsulamento
POO - 06 - Encapsulamento
 
Java11
Java11Java11
Java11
 
Fragmentos
FragmentosFragmentos
Fragmentos
 
Classes e Objectos JAVA
Classes e Objectos JAVAClasses e Objectos JAVA
Classes e Objectos JAVA
 
Java orientação a objetos (variaveis de instancia e metodos)
Java   orientação a objetos (variaveis de instancia e metodos)Java   orientação a objetos (variaveis de instancia e metodos)
Java orientação a objetos (variaveis de instancia e metodos)
 
Padrões de Projeto para Jogos
Padrões de Projeto para JogosPadrões de Projeto para Jogos
Padrões de Projeto para Jogos
 
DevFest 2012 - Esquartejando sua Activity com Fragments
DevFest 2012 - Esquartejando sua Activity com FragmentsDevFest 2012 - Esquartejando sua Activity com Fragments
DevFest 2012 - Esquartejando sua Activity com Fragments
 
5507 os principais design patterns
5507   os principais design patterns5507   os principais design patterns
5507 os principais design patterns
 
Java - Aula 4 - Sobrecarga de construtores, UML e Herança
Java - Aula 4 - Sobrecarga de construtores, UML e HerançaJava - Aula 4 - Sobrecarga de construtores, UML e Herança
Java - Aula 4 - Sobrecarga de construtores, UML e Herança
 
Encapsulamento em oo
Encapsulamento em ooEncapsulamento em oo
Encapsulamento em oo
 
HERANÇA - Programação Orientada a Objetos JAVA
HERANÇA - Programação Orientada a Objetos JAVAHERANÇA - Programação Orientada a Objetos JAVA
HERANÇA - Programação Orientada a Objetos JAVA
 

Destacado

Java Web 4 - Servlets e JSP 2
Java Web 4 - Servlets e JSP 2Java Web 4 - Servlets e JSP 2
Java Web 4 - Servlets e JSP 2Eduardo Mendes
 
TDD Projeto e Estrategias
TDD Projeto e EstrategiasTDD Projeto e Estrategias
TDD Projeto e EstrategiasEduardo Mendes
 
Introdução à Linguagem Ruby - Fundamentos - Parte 2
 Introdução à Linguagem Ruby - Fundamentos - Parte 2 Introdução à Linguagem Ruby - Fundamentos - Parte 2
Introdução à Linguagem Ruby - Fundamentos - Parte 2Eduardo Mendes
 
Acesso a banco de dados com JDBC
Acesso a banco de dados com JDBCAcesso a banco de dados com JDBC
Acesso a banco de dados com JDBCEduardo Mendes
 
Desenvolvimento web com PHP parte 3
Desenvolvimento web com PHP parte 3Desenvolvimento web com PHP parte 3
Desenvolvimento web com PHP parte 3Eduardo Mendes
 
Turbinando o desenvolvimento com Eclipse
Turbinando o desenvolvimento com EclipseTurbinando o desenvolvimento com Eclipse
Turbinando o desenvolvimento com EclipseMarcos Sousa
 
Engenharia de Requisitos
Engenharia de RequisitosEngenharia de Requisitos
Engenharia de RequisitosEduardo Mendes
 
Desenvolvimento web com PHP parte 4
Desenvolvimento web com PHP parte 4Desenvolvimento web com PHP parte 4
Desenvolvimento web com PHP parte 4Eduardo Mendes
 
Teste de Software - parte 1
Teste de Software - parte 1Teste de Software - parte 1
Teste de Software - parte 1Eduardo Mendes
 
The Power of Collaboration to Build Your Own Startup
The Power of Collaboration to Build Your Own StartupThe Power of Collaboration to Build Your Own Startup
The Power of Collaboration to Build Your Own StartupTaufan Erfiyanto
 
Testes de Software parte 2
Testes de Software parte 2Testes de Software parte 2
Testes de Software parte 2Eduardo Mendes
 
TDD - Prática com RSpec
TDD - Prática com RSpecTDD - Prática com RSpec
TDD - Prática com RSpecEduardo Mendes
 
Evolucao de software - parte 2
Evolucao de software - parte 2Evolucao de software - parte 2
Evolucao de software - parte 2Eduardo Mendes
 
Evolucao de software - parte 1
Evolucao de software - parte 1Evolucao de software - parte 1
Evolucao de software - parte 1Eduardo Mendes
 

Destacado (20)

Java Web 4 - Servlets e JSP 2
Java Web 4 - Servlets e JSP 2Java Web 4 - Servlets e JSP 2
Java Web 4 - Servlets e JSP 2
 
Rails - parte 1
Rails - parte 1Rails - parte 1
Rails - parte 1
 
TDD Projeto e Estrategias
TDD Projeto e EstrategiasTDD Projeto e Estrategias
TDD Projeto e Estrategias
 
Introdução ao TDD
Introdução ao TDDIntrodução ao TDD
Introdução ao TDD
 
Introdução à Linguagem Ruby - Fundamentos - Parte 2
 Introdução à Linguagem Ruby - Fundamentos - Parte 2 Introdução à Linguagem Ruby - Fundamentos - Parte 2
Introdução à Linguagem Ruby - Fundamentos - Parte 2
 
Acesso a banco de dados com JDBC
Acesso a banco de dados com JDBCAcesso a banco de dados com JDBC
Acesso a banco de dados com JDBC
 
Desenvolvimento web com PHP parte 3
Desenvolvimento web com PHP parte 3Desenvolvimento web com PHP parte 3
Desenvolvimento web com PHP parte 3
 
Turbinando o desenvolvimento com Eclipse
Turbinando o desenvolvimento com EclipseTurbinando o desenvolvimento com Eclipse
Turbinando o desenvolvimento com Eclipse
 
Html Aula 1 - parte 2
Html Aula 1 - parte 2Html Aula 1 - parte 2
Html Aula 1 - parte 2
 
AngularJS - Rotas
AngularJS - RotasAngularJS - Rotas
AngularJS - Rotas
 
Engenharia de Requisitos
Engenharia de RequisitosEngenharia de Requisitos
Engenharia de Requisitos
 
RSpec com doubles
RSpec com doublesRSpec com doubles
RSpec com doubles
 
Desenvolvimento web com PHP parte 4
Desenvolvimento web com PHP parte 4Desenvolvimento web com PHP parte 4
Desenvolvimento web com PHP parte 4
 
Teste de Software - parte 1
Teste de Software - parte 1Teste de Software - parte 1
Teste de Software - parte 1
 
Jquery
JqueryJquery
Jquery
 
The Power of Collaboration to Build Your Own Startup
The Power of Collaboration to Build Your Own StartupThe Power of Collaboration to Build Your Own Startup
The Power of Collaboration to Build Your Own Startup
 
Testes de Software parte 2
Testes de Software parte 2Testes de Software parte 2
Testes de Software parte 2
 
TDD - Prática com RSpec
TDD - Prática com RSpecTDD - Prática com RSpec
TDD - Prática com RSpec
 
Evolucao de software - parte 2
Evolucao de software - parte 2Evolucao de software - parte 2
Evolucao de software - parte 2
 
Evolucao de software - parte 1
Evolucao de software - parte 1Evolucao de software - parte 1
Evolucao de software - parte 1
 

Más de Eduardo Mendes

JavaScript - Introdução com Orientação a Objetos
JavaScript - Introdução com Orientação a ObjetosJavaScript - Introdução com Orientação a Objetos
JavaScript - Introdução com Orientação a ObjetosEduardo Mendes
 
Angular JS - Fundamentos
Angular JS - FundamentosAngular JS - Fundamentos
Angular JS - FundamentosEduardo Mendes
 
Introdução à Internet, Http e HTML
Introdução à Internet, Http e HTMLIntrodução à Internet, Http e HTML
Introdução à Internet, Http e HTMLEduardo Mendes
 
Estimativas de Esforço - Engenharia de Software
Estimativas de Esforço - Engenharia de SoftwareEstimativas de Esforço - Engenharia de Software
Estimativas de Esforço - Engenharia de SoftwareEduardo Mendes
 
Java web 6 JSP Expression Language Taglib parte 2
Java web 6 JSP Expression Language Taglib parte 2Java web 6 JSP Expression Language Taglib parte 2
Java web 6 JSP Expression Language Taglib parte 2Eduardo Mendes
 
Validações no Ruby on Rails
Validações no Ruby on Rails Validações no Ruby on Rails
Validações no Ruby on Rails Eduardo Mendes
 
Padroes Template-Method (Método Gabarito)
Padroes Template-Method (Método Gabarito)Padroes Template-Method (Método Gabarito)
Padroes Template-Method (Método Gabarito)Eduardo Mendes
 
PHP básico para iniciantes
PHP básico para iniciantesPHP básico para iniciantes
PHP básico para iniciantesEduardo Mendes
 
PHP e MySQL para iniciantes
PHP e MySQL para iniciantesPHP e MySQL para iniciantes
PHP e MySQL para iniciantesEduardo Mendes
 

Más de Eduardo Mendes (20)

JavaScript - Introdução com Orientação a Objetos
JavaScript - Introdução com Orientação a ObjetosJavaScript - Introdução com Orientação a Objetos
JavaScript - Introdução com Orientação a Objetos
 
Angular JS - Fundamentos
Angular JS - FundamentosAngular JS - Fundamentos
Angular JS - Fundamentos
 
Layout Fluido
Layout FluidoLayout Fluido
Layout Fluido
 
Web Design Responsivo
Web Design ResponsivoWeb Design Responsivo
Web Design Responsivo
 
Html - Aula 4
Html - Aula 4Html - Aula 4
Html - Aula 4
 
Html - Aula 3
Html - Aula 3Html - Aula 3
Html - Aula 3
 
Introdução à Internet, Http e HTML
Introdução à Internet, Http e HTMLIntrodução à Internet, Http e HTML
Introdução à Internet, Http e HTML
 
ExtJS-4
ExtJS-4ExtJS-4
ExtJS-4
 
Jquery 2
Jquery 2Jquery 2
Jquery 2
 
Estimativas de Esforço - Engenharia de Software
Estimativas de Esforço - Engenharia de SoftwareEstimativas de Esforço - Engenharia de Software
Estimativas de Esforço - Engenharia de Software
 
Java web 6 JSP Expression Language Taglib parte 2
Java web 6 JSP Expression Language Taglib parte 2Java web 6 JSP Expression Language Taglib parte 2
Java web 6 JSP Expression Language Taglib parte 2
 
Validações no Ruby on Rails
Validações no Ruby on Rails Validações no Ruby on Rails
Validações no Ruby on Rails
 
Padrão Iterator
Padrão IteratorPadrão Iterator
Padrão Iterator
 
Padroes Template-Method (Método Gabarito)
Padroes Template-Method (Método Gabarito)Padroes Template-Method (Método Gabarito)
Padroes Template-Method (Método Gabarito)
 
Padrão Command
Padrão CommandPadrão Command
Padrão Command
 
Padrão Fachada
Padrão FachadaPadrão Fachada
Padrão Fachada
 
Padrão Adapter
Padrão AdapterPadrão Adapter
Padrão Adapter
 
Web Design Responsivo
Web Design ResponsivoWeb Design Responsivo
Web Design Responsivo
 
PHP básico para iniciantes
PHP básico para iniciantesPHP básico para iniciantes
PHP básico para iniciantes
 
PHP e MySQL para iniciantes
PHP e MySQL para iniciantesPHP e MySQL para iniciantes
PHP e MySQL para iniciantes
 

Singleton - Padrão de Projeto

  • 1.
  • 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 class MeuObjeto { private MeuObjeto() {} } n O que significa isso? n Existe algum código que possa usar este construtor?
  • 7. Singleton public class MeuObjeto { public static MeuObjeto getInstance() {} } n O que isto significa? MeuObjeto.getInstance();
  • 8. Singleton n Juntando as 2 coisas public class MeuObjeto { private MeuObjeto(){} public static MeuObjeto getInstance() { return new MeuObjeto(); } }
  • 9. Singleton n Uma outra 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
  • 16. 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
  • 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 Os clientes acessam uma instância Singleton unicamente pela operação getInstance do Singleton