Você está aqui: PHP ::: Design Patterns (Padrões de Projeto) ::: Singleton Pattern |
|
Como usar o padrão de projeto Singleton em suas aplicações PHPQuantidade de visualizações: 8688 vezes |
|
O padrão de projeto Singleton (ou Singleton Pattern) é um dos padrões de projeto mais conhecidos e implementados extensivamente nas linguagens Java e C#. Como o PHP, a partir de sua versão 5, suporta praticamente todos os recursos da programação orientada a objetos, este padrão pode ser implementado também nesta linguagem sem muitas dificuldades. 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 PHP. Observe o código a seguir: <? // Uma classe Singleton responsável por gravar // logs no sistema class Logger{ // variável estática e privada que guarda a instância // atual da classe private static $instancia = NULL; // Método estático que retorna uma instância já existente, ou // cria uma nova instância public static function getInstance(){ if(self::$instancia == NULL){ self::$instancia = new Logger(); } return self::$instancia; } // Construtor privado para evitar que instâncias sejam ...... Ao executar este código teremos o seguinte resultado: Vou registrar o log: Novo usuário cadastrado. |
|
Link para compartilhar na Internet ou com seus amigos: | |
C# ::: Dicas & Truques ::: Tipos de Dados |
C# para iniciantes - Como usar o tipo decimal da linguagem C#Quantidade de visualizações: 16194 vezes |
O tipo decimal (um apelido para o tipo System.Decimal do .NET) é um tipo numérico com precisão de 128 bits, o que o torna apropriado para cálculos enormes e de grande precisão, tais como cálculos financeiros. A faixa aproximada deste tipo é: (mais ou menos)1.0 x 10e−28 até (mais ou menos)7.9 x 10e28 com precisão de 28 ou 29 dígitos significantes. Em C# 2.0, o tipo decimal ocupa 12 bytes, como pode ser observado no trecho de código abaixo: Console.WriteLine("O tipo decimal ocupa " + sizeof(decimal) + ...... É preciso ter muito cuidado ao atribuir um literal de ponto-flutuante à uma variável do tipo decimal. Veja: decimal valor = 34.50; ...... Este trecho de código não compila. Veja o erro reportado: Literal of type double cannot be implicitly converted to type 'decimal'; use an 'M' suffix to create a literal of this type Esta mensagem nos diz que não é possível converter implicitamente um tipo double para um tipo decimal. Para solucionar isso, basta usar a letra "M" ou "m" após o valor literal. Veja: decimal valor = 34.50m; ...... Para finalizar, se estivermos atribuindo um literal inteiro à uma variável do tipo decimal, o uso do "M" ou "m" é dispensado. O trecho de código abaixo compila sem quaisquer problemas: decimal valor = 34; ...... |
JavaFX ::: Pacote javafx.scene.layout (Package javafx.scene.layout) ::: HBox (Classe HBox) |
Como definir o espaço interno do HBox do JavaFX usando o método setPadding()Quantidade de visualizações: 684 vezes |
Em algumas situações nós precisamos definir o espaço interno, ou seja, o padding, do gerenciador de layout HBox. Para isso nós podemos usar o método setPadding() e fornecer a ele um objeto da classe javafx.geometry.Insets. Este método é herdado da classe javafx.scene.layout.Region. Lembre-se de que a função setPadding() define o espaço interno do VBox, ou seja, o espaço que deverá existir entre suas margens e os componentes contidos nele. Veja um trecho de código JavaFX no qual temos um gerenciador de layout HBox e três botões: package estudosjavafx; import javafx.application.Application; import javafx.geometry.Insets; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.layout.HBox; import javafx.stage.Stage; public class EstudosJavaFX extends Application { public static void main(String[] args){ launch(args); } @Override public void start(Stage primaryStage){ // vamos criar três botões Button btn1 = new Button("Botão 1"); Button btn2 = new Button("Botão 2"); Button btn3 = new Button("Botão 3"); // agora criamos um laytou HBox e colocamos ...... Execute este código, experimente alterar os valores do objeto Insets fornecido ao método setPadding e veja os resultados obtidos. |
C# ::: Desafios e Lista de Exercícios Resolvidos ::: Strings e Caracteres |
Exercícios Resolvidos de C# - Como retornar o código ASCII associado a um caractere em C# - Ler um caractere e retornar o código ASCII correspondenteQuantidade de visualizações: 306 vezes |
Pergunta/Tarefa: Escreva um programa C# que pede para o usuário informar um caractere (letra ou número) e mostre o código ASCII correspondente. Sua saída deverá ser parecida com: Informe um caractere: A Você informou o caractere: A O código ASCII correspondente é: 65 Veja a resolução comentada deste exercício em C#: using System; namespace Estudos { class Principal { // função principal do programa C# static void Main(string[] args) { // vamos pedir para o usuário informar uma letra, símbolo ou pontuação Console.Write("Informe um caractere: "); // vamos ler o caractere informado char caractere = Console.ReadLine()[0]; // agora vamos obter o código ASCII correspondente ...... O Código Padrão Americano para o Intercâmbio de Informação (do inglês American Standard Code for Information Interchange - ASCII, pronunciado [áski]) é um sistema de representação de letras, algarismos e sinais de pontuação e de controle, através de um sinal codificado em forma de código binário (cadeias de bits formada por vários 0 e 1), desenvolvido a partir de 1960, que representa um conjunto de 128 sinais: 95 sinais gráficos (letras do alfabeto latino, algarismos arábicos, sinais de pontuação e sinais matemáticos) e 33 sinais de controle, utilizando 7 bits para representar todos os seus símbolos. |
Java ::: Desafios e Lista de Exercícios Resolvidos ::: Exceções e Tratamentos de Erros |
Exceções e Tratamentos de Erros - Exercícios Resolvidos de Java - Ex. 1 - Forçando o usuário a informar dois inteiros válidos antes de efetuar sua somaQuantidade de visualizações: 2537 vezes |
Pergunta/Tarefa: Escreva um programa Java que usa tratamento de erros try...catch para forçar o usuário a informar dois valores inteiros válidos antes de tentar somá-los. Caso o usuário informe um ou os dois valores inválidos, o programa deverá exibir uma mensagem de erro e solicitar os valores novamente. Sua saída deverá ser parecida com: Resposta/Solução: Veja a resolução comentada deste exercício usando Java console: package estudos; import java.util.Scanner; public class Estudos { public static void main(String[] args) { Scanner entrada = new Scanner(System.in); boolean validos = false; // para verificar se os valores são inteiros válidos int n1, n2, soma; // solicita que o usuário informe os dois valores while(!validos){ try { System.out.print("Informe o primeiro valor: "); n1 = Integer.parseInt(entrada.nextLine()); // tenta fazer a conversão System.out.print("Informe o segundo valor: "); ...... |
Java ::: Desafios e Lista de Exercícios Resolvidos ::: Recursão (Recursividade) |
Exercícios Resolvidos de Java - Um método recursivo que calcula o MDC (máximo divisor comum) entre dois números inteirosQuantidade de visualizações: 8314 vezes |
Exercício Resolvido de Java - Um método recursivo que calcula o MDC (máximo divisor comum) entre dois números inteiros Pergunta/Tarefa: O máximo divisor comum ou MDC (mdc) entre dois ou mais números inteiros é o maior número inteiro que é fator de tais números. Por exemplo, os divisores comuns de 12 e 18 são 1, 2, 3 e 6, logo mdc(12, 18) = 6. A definição abrange qualquer número de termos, por exemplo mdc(10, 15, 25, 30) = 5. O cálculo do MDC entre x e y pode ser feito recursivamente da seguinte forma: Se y for igual a 0, então mdc(x, y) = x. Caso contrário, mdc(x, y) = mdc(y, x % y), no qual % é o operador de módulo (restante da divisão inteira). Escreva um método recursivo que receba dois inteiros e calcule o mdc. Seu método deverá possuir a seguinte assinatura: public static int mdc(int x, int y){ // sua implementação aqui } Informe o primeiro inteiro: 12 Informe o segundo inteiro: 18 O MDC dos valores 12 e 18 é 6 Veja a resolução comentada deste exercício usando Java console: package exercicio; import java.util.Scanner; public class Exercicio { public static void main(String[] args) { // cria um novo objeto da classe Scanner Scanner entrada = new Scanner(System.in); // vamos solicitar dois valores inteiros System.out.print("Informe o primeiro inteiro: "); // lê o primeiro inteiro int a = Integer.parseInt(entrada.nextLine()); // solicita o segundo inteiro System.out.print("Informe o segundo inteiro: "); // lê o segundo inteiro int b = Integer.parseInt(entrada.nextLine()); ...... |
Mais Desafios de Programação e Exercícios e Algoritmos Resolvidos de Java |
Veja mais Dicas e truques de Java |
Dicas e truques de outras linguagens |
Quem Somos |
Programador Freelancer - Full Stack Developer, Professional Java Developer, PHP, C/C++, Python Programmer, wxWidgets Professional C++ Programmer, Freelance Programmer. Formado em Ciência da Computação pela UNIP (Universidade Paulista Campus Goiânia) e cursando Engenharia Civil pela PUC-Goiás. Possuo conhecimentos avançados de Java, Python, JavaScript, C, C++, PHP, C#, VB.NET, Delphi, Android, Perl, e várias tecnologias que envolvem o desenvolvimento web, desktop, front-end e back-end. Atuo há mais de 20 anos como programador freelancer, atendendo clientes no Brasil, Portugal, Argentina e vários outros paises.
Entre em contato comigo para, juntos, vermos em que posso contribuir para resolver ou agilizar o desenvolvimento de seus códigos.
|
Programador Freelancer - Formado em Sistemas de Informação pela Faculdade Delta, Pós graduado em Engenharia de Software (PUC MINAS), Pós graduado Marketing Digital (IGTI) com ênfase em Growth Hacking. Mais de 15 anos de experiência em programação Web. Marketing Digital focado em desempenho, desenvolvimento de estratégia competitiva, analise de concorrência, SEO, webvitals, e Adwords, Métricas de retorno. Especialista Google Certificado desde 2011 Possui domínio nas linguagens PHP, C#, JavaScript, MySQL e frameworks Laravel, jQuery, flutter. Atualmente aluno de mestrado em Ciência da Computação (UFG)
Não basta ter um site. É necessário ter um site que é localizado e converte usuários em clientes. Se sua página não faz isso, Fale comigo e vamos fazer uma analise e conseguir resultados mais satisfatórios..
|
Linguagens Mais Populares |
1º lugar: Java |