Você está aqui: Java ::: Design Patterns (Padrões de Projeto) ::: Singleton Pattern |
Padrões de projeto para iniciantes - Como usar o padrão de projeto Singleton em suas aplicações JavaQuantidade de visualizações: 11824 vezes |
O padrão de projeto Singleton (ou Singleton Pattern) é um dos padrões de projeto mais conhecidos e implementado extensivamente nas linguagens que suportam programação orientada a objetos, tais como Java e C#. Nesta dica eu mostrarei como implementá-lo. Uma das situações nas quais usamos o padrão Singleton é quando queremos que somente uma instância de uma determinada classe seja criada e que esta esteja disponível para todas as demais classes do sistema. Um exemplo disso é uma classe responsável por registrar logs do sistema, uma classe responsável por obter conexões com o banco de dados, ou ainda uma classe que concentra dados de configuração da aplicação. Assim, a chave do padrão Singleton é um método estático, geralmente chamado de getInstance(), que retorna uma nova instância da classe se esta ainda não foi instanciada. Se a classe já tiver sido instanciada, o método getInstance() retorna a instância já existente. Vamos ver um exemplo deste padrão em Java. Observe o código a seguir: Código para Logger.java: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- package estudos; // Uma classe Singleton responsável por gravar // logs no sistema public class Logger { // variável estática e privada que guarda a instância // atual da classe private static Logger instancia = null; // Método estático que retorna uma instância já existente, ou // cria uma nova instância public static Logger getInstance() { if (instancia == null) { instancia = new Logger(); } return instancia; } // Construtor privado para evitar que instâncias sejam // criadas usando new private Logger() { // não precisamos fazer nada aqui } // método usado para registrar logs public void registrarLog(String dados) { System.out.println("Vou registrar o log: " + dados); } } Veja agora como podemos chamar o método getInstance(), obter um objeto da classe Logger e "registrar um log": Código para Main.java: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- package estudos; public class Main { public static void main(String[] args) { // vamos registrar um novo log usando a classe Singleton Logger.getInstance().registrarLog("Novo usuário cadastrado."); } } Ao executar esta aplicação teremos a seguinte saída: Vou registrar o log: Novo usuário cadastrado. |
Link para compartilhar na Internet ou com seus amigos: |
Java ::: Desafios e Lista de Exercícios Resolvidos ::: Laços |
Exercícios Resolvidos de Java - Contando de 1 até 20 e formatando a saída usando System.out.printf()Quantidade de visualizações: 10899 vezes |
Exercício Resolvido de Java - Contando de 1 até 20 e formatando a saída usando System.out.printf() Pergunta/Tarefa: Escreva um programa Java console que usa o laço for para contar de 1 até 20 e exibir estes valores no seguinte formato: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Dica: Use o operador de módulo % para determinar o momento da quebra de linha e o método System.out.printf() para formatar o valor a ser exibido de forma a adicionar a quantidade correta de espaços entre os valores. Resposta/Solução: Eis a solução para este exercício: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- public static void main(String[] args){ // laço for que conta de 1 até 20 for(int i = 1; i <= 20; i++){ System.out.printf( "%2d ", i); if(i % 5 == 0){ System.out.println(); } } } O mais importante a considerar aqui é o uso do método System.out.printf() na linha: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- System.out.printf( "%2d ", i); Aqui nós estamos especificando a largura (width) do valor inteiro como dois dígitos. Desta forma, se o valor for menor que 10 (um dígito), um espaço extra será adicionado à esquerda. Se o valor for maior que 9 (dois dígitos) nada acontece. Finalmente, três espaços são adicionados à direita do valor. Veja agora a explicação sobre o uso do operador de módulo % para provocar a quebra de linha após o quinto valor de cada fileira: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- Aqui nós testamos se o valor atual da variável i é múltiplo de 5 (para ser múltiplo de 5, o resto da divisão inteira de valor por 5 deverá ser 0). Neste exemplo os valores que são múltiplos de 5 são: 5, 10, 15 e 20. Assim. logo após estes valores nós fazemos uma chamada à: System.out.println(); para provocar uma quebra de linha e iniciar uma nova fileira de valores. |
Java ::: Dicas & Truques ::: Trigonometria - Funções Trigonométricas |
Como calcular o cateto adjascente dadas as medidas da hipotenusa e do cateto oposto em JavaQuantidade de visualizações: 1331 vezes |
Nesta dica mostrarei como podemos tirar proveito do Teorema de Pitágoras para obter a medida do cateto adjascente quando temos as medidas da hipotenusa e do cateto oposto. Este teorema diz que "o quadrado da hipotenusa é igual à soma dos quadrados dos catetos", o que torna a nossa tarefa, na linguagem Java, muito fácil. Comece observando a imagem a seguir: Veja que, nessa imagem, eu já coloquei os comprimentos da hipotenusa, do cateto oposto e do cateto adjascente. Para facilitar a conferência dos cálculos, eu coloquei também os ângulos theta (que alguns livros chamam de alfa) e beta já devidamente calculados. A medida da hipotenusa é, sem arredondamentos, 36.056 metros. Então, sabendo que o quadrado da hipotenusa é igual à soma dos quadrados dos catetos (Teorema de Pitógoras): \[c^2 = a^2 + b^2\] Tudo que temos que fazer é mudar a fórmula para: \[b^2 = c^2 - a^2\] Veja que agora o quadrado do cateto adjascente é igual ao quadrado da hipotenusa menos o quadrado do cateto oposto. Não se esqueça de que a hipotenusa é o maior lado do triângulo retângulo. Veja agora como esse cálculo é feito em linguagem Java: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- package arquivodecodigos; public class Estudos{ public static void main(String args[]){ double c = 36.056; // medida da hipotenusa double a = 20; // medida do cateto oposto // agora vamos calcular a medida da cateto adjascente double b = Math.sqrt(Math.pow(c, 2) - Math.pow(a, 2)); // e mostramos o resultado System.out.println("A medida do cateto adjascente é: " + b); } } Ao executar este código Java nós teremos o seguinte resultado: A medida do cateto adjascente é: 30.00058559428465 Como podemos ver, o resultado retornado com o código Java confere com os valores da imagem apresentada. |
Java ::: Dicas & Truques ::: Formulários e Janelas |
Como definir um ícone para a janela do aplicativo Java Swing usando o método setIconImage() da classe JFrameQuantidade de visualizações: 16526 vezes |
Este exemplo mostra como definir um ícone para uma janela JFrame do Java Swing. Antes de testar o código, certifique-se de ter uma imagem chamada icon.gif no diretório de execução do aplicativo (ou no local que você especificar). Veja o código completo para o exemplo: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- import java.awt.*; import javax.swing.*; public class Estudos extends JFrame{ public Estudos() { super("A classe JFrame"); // Define o ícone para a janela ImageIcon icone = new ImageIcon("icon.gif"); setIconImage(icone.getImage()); setSize(350, 250); setVisible(true); } public static void main(String args[]){ Estudos app = new Estudos(); app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } |
Vamos testar seus conhecimentos em Ética e Legislação Profissional |
Princípios específicos do Direito do Consumidor (Exame de ordem 2013). Maria e Manoel, casados, pais dos gêmeos Gabriel e Thiago, que têm apenas três meses de vida, residem há seis meses no Condomínio Vila Feliz. O fornecimento do serviço de energia elétrica na cidade onde moram é prestado por uma única concessionária, a Companhia de Eletricidade Luz S.A. Há uma semana, o casal vem sofrendo com as contínuas e injustificadas interrupções na prestação do serviço pela concessionária, o que já acarretou a queima do aparelho de televisão e da geladeira, com a perda de todos os alimentos nela contidos. O casal pretende ser indenizado. Nesse caso, à luz do princípio da vulnerabilidade previsto no Código de Proteção e Defesa do Consumidor, assinale a afirmativa que esteja de acordo. A) Prevalece o entendimento jurisprudencial no sentido de que a vulnerabilidade no Código do Consumidor é sempre presumida, tanto para o consumidor pessoa física, Maria e Manoel, quanto para a pessoa jurídica, no caso, o Condomínio Vila Feliz, tendo ambos direitos básicos à indenização e à inversão judicial automática do ônus da prova. B) A doutrina consumerista dominante considera a vulnerabilidade um conceito jurídico indeterminado, plurissignificativo, sendo correto afirmar que, no caso em questão, está configurada a vulnerabilidade fática do casal diante da concessionária, havendo direito básico à indenização pela interrupção imotivada do serviço público essencial. C) É dominante o entendimento no sentido de que a vulnerabilidade nas relações de consumo é sinônimo exato de hipossuficiência econômica do consumidor. Logo, basta ao casal Maria e Manoel demonstrá-la para receber a integral proteção das normas consumeristas e o consequente direito básico à inversão automática do ônus da prova e à ampla indenização pelos danos sofridos. D) A vulnerabilidade nas relações de consumo se divide em apenas duas espécies: a jurídica ou a científica e a técnica. Aquela representa a falta de conhecimentos jurídicos ou outros pertinentes à contabilidade e à economia, e esta, à ausência de conhecimentos específicos sobre o serviço oferecido, sendo que sua verificação é requisito legal para inversão do ônus da prova a favor do casal e do consequente direito à indenização. E) No sistema das relações de consumo reguladas pelo Código de Defesa do Consumidor, a identificação de que existe um elo mais fraco na relação traduz o reconhecimento da transparência. Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em AutoCAD Civil 3D |
Comando Create Alignment from Objects Qual dos objetos abaixo não pode ser usado para criar um alinhamento quando acionamos o comando Create Alignment from Objects, disponível no item Alignment da aba Create Design? A) Line B) Arc C) Circle D) Polyline Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em AutoCAD Civil 3D |
Survey Points e COGO Points Cogo points não podem ser editados na janela Properties. A) Verdadeiro B) Falso Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em JavaScript |
Qual é o local correto para a inserção de códigos JavaScript em um documento HTML? A) Seção <head> B) Seção <body> C) Os códigos JavaScript podem ser colocados tanto na seção <head> quanto na seção <body> Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em Engenharia Civil - Instalações Hidráulicas Prediais |
O projeto de instalação hidrossanitária Em relação ao histograma, considere as seguintes sentenças: I - Histograma consiste em um gráfico que apresenta a distribuição de frequências de uma variável por meio de retângulos justapostos, feitos sobre as classes dessa variável, sendo que a área de cada retângulo é proporcional à frequência observada da correspondente classe. II - Histogramas são obrigatórios em todos os projetos civis, sendo, inclusive, exigidos pelos órgãos para liberação do habite-se; III - Histogramas são recomendáveis apenas em projetos muito grandes ou de grande complexidade. Assinale a alternativa correta: A) Apenas as sentenças I e II estão corretas. B) Apenas as sentenças II e III estão corretas. C) Apenas a sentença I está correta. D) Apenas a sentença III está correta. E) Todas as sentenças estão corretas. Verificar Resposta Estudar Cards Todas as Questões |
Desafios, Exercícios e Algoritmos Resolvidos de Java |
Veja mais Dicas e truques de Java |
Dicas e truques de outras linguagens |
Java - Como remover itens repetidos de uma ArrayList usando um objeto da classe LinkedHashSet do Java Delphi - Como retornar o caractere a partir de um determinado código ASCII em Delphi usando a função Chr() |
Códigos Fonte |
Software de Gestão Financeira com código fonte em PHP, MySQL, Bootstrap, jQuery - Inclui cadastro de clientes, fornecedores e ticket de atendimento Diga adeus às planilhas do Excel e tenha 100% de controle sobre suas contas a pagar e a receber, gestão de receitas e despesas, cadastro de clientes e fornecedores com fotos e histórico de atendimentos. Código fonte completo e funcional, com instruções para instalação e configuração do banco de dados MySQL. Fácil de modificar e adicionar novas funcionalidades. Clique aqui e saiba mais |
Controle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidades Tenha o seu próprio sistema de controle de estoque web. com cadastro de produtos, categorias, fornecedores, entradas e saídas de produtos, com relatórios por data, margem de lucro e muito mais. Código simples e fácil de modificar. Acompanha instruções para instalação e criação do banco de dados MySQL. Clique aqui e saiba mais |
Linguagens Mais Populares |
1º lugar: Java |