Lista de Exercícios Resolvidos: Java | Python | VisuAlg | Portugol | C | C# | VB.NET | C++
Você está aqui: PHP ::: Design Patterns (Padrões de Projeto) ::: Singleton Pattern

Como usar o padrão de projeto Singleton em suas aplicações PHP

Quantidade 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&#8722;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 correspondente

Quantidade 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
Resposta/Solução:

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 soma

Quantidade 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 inteiros

Quantidade 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
}
Sua saída deverá ser parecida com:

Informe o primeiro inteiro: 12
Informe o segundo inteiro: 18
O MDC dos valores 12 e 18 é 6
Resposta/Solução:

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

Osmar J. Silva
Programador Freelancer
WhatsApp +55 (062) 98553-6711

Goiânia-GO
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.
José de Angelis
Programador Freelancer
WhatsApp +55 (062) 98243-1195

Goiânia-GO
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
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: Delphi
6º lugar: C
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby



© 2024 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 13 usuários muito felizes estudando em nosso site.