Sobes.tech
Middle+

Fale sobre os padrões de projeto utilizados para otimizar a frequência de execução do código.

sobes.tech IA

Resposta da IA

Para otimizar a frequência de execução do código, muitas vezes são utilizados padrões de projeto que reduzem os custos gerais, evitam cálculos repetidos e gerenciam recursos de forma eficiente.

Padrões principais:

  1. Singleton

    • Garante a criação de uma única instância de uma classe. É útil para acessar recursos compartilhados, como conexões a bancos de dados ou caches, evitando sua criação múltipla.
    <?php
    class Singleton {
        private static $instance = null;
        private function __construct() { /* ... */ }
        private function __clone() { /* ... */ }
        private function __wakeup() { /* ... */ }
    
        public static function getInstance(): self {
            if (self::$instance === null) {
                self::$instance = new self();
            }
            return self::$instance;
        }
    }
    
  2. Registry

    • Armazenamento centralizado para objetos e serviços comuns. Permite acessar recursos já criados ou configurados sem necessidade de re-inicializá-los.
    <?php
    class Registry {
        private static $data = [];
    
        public static function set(string $key, $value): void {
            self::$data[$key] = $value;
        }
    
        public static function get(string $key) {
            return self::$data[$key] ?? null;
        }
    
        public static function has(string $key): bool {
            return isset(self::$data[$key]);
        }
    }
    
  3. Flyweight

    • Utilizado para gerir eficazmente uma grande quantidade de objetos pequenos com comportamentos semelhantes, partilhando o seu estado. Permite poupar memória e tempo na criação de objetos. Um exemplo pode ser o uso de objetos comuns para representar caracteres, cores, etc.
  4. Proxy

    • Fornece um substituto ou "representante" para outro objeto. Pode ser usado para carregamento diferido (Lazy Loading), quando o objeto é criado apenas na primeira vez que é acedido, ou para cachear resultados de operações.
  5. Cache (ou Memoization - não exatamente um padrão, mas uma técnica)

    • Guardar os resultados de funções ou consultas dispendiosas para devolver o resultado armazenado em chamadas posteriores com os mesmos argumentos, em vez de recalcular. Frequentemente implementado dentro de outros padrões ou como um componente separado.
    <?php
    function expensiveFunction($arg) {
        static $cache = []; // Implementação simples de cache
    
        if (isset($cache[$arg])) {
            echo "A usar cache para $arg\n";
            return $cache[$arg];
        }
    
        echo "A calcular para $arg\n";
        // Simulação de operação dispendiosa
        sleep(1);
        $result = $arg * 2;
        $cache[$arg] = $result;
    
        return $result;
    }
    
    expensiveFunction(10); // Calcula e armazena em cache
    expensiveFunction(10); // Usa o cache
    
  6. Object Pool

    • Armazena um conjunto de objetos prontos a usar, que podem ser reutilizados em vez de criados novamente. Útil para objetos dispendiosos de criar, como conexões a bases de dados.
  7. Lazy Loading

    • Princípio separado, frequentemente implementado com Factory, Proxy ou outros padrões. O objeto ou recurso é carregado apenas quando realmente necessário, reduzindo a carga inicial.

Cada um destes padrões ajuda a reduzir a redundância de operações, usar recursos de forma eficiente e, consequentemente, otimizar a frequência e velocidade de execução do código. A escolha do padrão depende da tarefa específica e do contexto.