
Gerando Dados Fictícios para Análise de Compras em Python
Ao realizar estudos de análise de dados ou ao testar sistemas que lidam com grandes volumes de informações, é comum... Leia mais
Desenvolvedor de Software
Quando desenvolvemos software, é comum encontrar situações onde diferentes comportamentos precisam ser aplicados a objetos semelhantes. A abordagem tradicional de implementar todos esses comportamentos diretamente na classe pode tornar o código confuso e difícil de manter. É aí que entra o Padrão Strategy.
O Padrão Strategy é um padrão de design comportamental que permite definir uma família de algoritmos ou comportamentos, encapsulá-los em classes separadas e torná-los intercambiáveis. Com o Strategy, movemos a responsabilidade de decidir qual comportamento aplicar para fora da classe principal. Dessa forma, podemos modificar ou estender o comportamento sem alterar o código original da classe.
Imagine que estamos desenvolvendo um sistema de pagamento para uma loja online. O cliente pode escolher diferentes métodos de pagamento, como cartão de crédito, PayPal ou boleto. Em vez de implementar cada método de pagamento diretamente na classe Pedido
, podemos aplicar o Padrão Strategy para gerenciar esses comportamentos.
Primeiro, criamos uma interface que todas as estratégias de pagamento irão implementar:
<?php interface MetodoPagamento { public function pagar(float $valor); }
Agora, podemos criar diferentes estratégias para os métodos de pagamento:
<?php class PagamentoCartaoCredito implements MetodoPagamento { public function pagar(float $valor) { echo "Pagamento de R$ {$valor} realizado com cartão de crédito.\n"; } } class PagamentoPayPal implements MetodoPagamento { public function pagar(float $valor) { echo "Pagamento de R$ {$valor} realizado via PayPal.\n"; } } class PagamentoBoleto implements MetodoPagamento { public function pagar(float $valor) { echo "Pagamento de R$ {$valor} realizado via boleto bancário.\n"; } }
Cada uma dessas classes implementa a interface MetodoPagamento
e possui sua própria lógica para processar o pagamento.
Agora, a classe Pedido
pode aceitar qualquer estratégia de pagamento e delegar a responsabilidade de processar o pagamento para a estratégia escolhida:
<?php class Pedido { private $metodoPagamento; public function __construct(MetodoPagamento $metodoPagamento) { $this->metodoPagamento = $metodoPagamento; } public function processarPagamento(float $valor) { $this->metodoPagamento->pagar($valor); } }
A classe Pedido
é simples, e seu único trabalho é delegar o processo de pagamento para o método escolhido, mantendo o código mais limpo e flexível.
Com as classes prontas, podemos criar um pedido e definir a estratégia de pagamento que desejamos usar:
<?php // O cliente escolhe pagar com cartão de crédito $pedido = new Pedido(new PagamentoCartaoCredito()); $pedido->processarPagamento(150.00); // O cliente escolhe pagar via PayPal $pedido = new Pedido(new PagamentoPayPal()); $pedido->processarPagamento(250.00); // O cliente escolhe pagar com boleto $pedido = new Pedido(new PagamentoBoleto()); $pedido->processarPagamento(300.00);
Cada vez que o cliente realiza uma compra, a classe Pedido
delega o processo de pagamento para a estratégia correta, sem a necessidade de modificar o código da classe. Se um novo método de pagamento for adicionado, como Pix, basta criar uma nova estratégia sem alterar as classes existentes.
if/else
ou switch
, o Strategy permite selecionar o comportamento dinamicamente através de polimorfismo.O Padrão Strategy é útil quando:
O Padrão Strategy é uma ótima solução quando queremos flexibilidade no comportamento dos objetos, especialmente quando esse comportamento pode variar ou evoluir ao longo do tempo. Ao aplicar esse padrão, mantemos nosso código organizado e fácil de estender. No contexto de desenvolvimento PHP, o Strategy pode ser extremamente útil para lidar com diferentes cenários onde algoritmos ou comportamentos precisam ser dinâmicos e intercambiáveis.
Ao realizar estudos de análise de dados ou ao testar sistemas que lidam com grandes volumes de informações, é comum... Leia mais
Neste guia, você aprenderá a fazer o deploy de uma aplicação Laravel em uma VPS rodando Ubuntu com o servidor... Leia mais
Trabalhar com intervalos de datas é uma necessidade comum em aplicações web, especialmente em sistemas que lidam com eventos, agendamentos... Leia mais
Configurar e gerenciar bancos de dados pode ser uma tarefa desafiadora, especialmente quando você precisa garantir a portabilidade e a... Leia mais