Script para automatizar instalações de ferramentas em ambiente LINUX
Para agilizar as instalações das minhas ferramentas de desenvolvimento quando for necessário resolvi montar o seguinte script: Basta colocar o... 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.
Para agilizar as instalações das minhas ferramentas de desenvolvimento quando for necessário resolvi montar o seguinte script: Basta colocar o... Leia mais
No desenvolvimento de aplicações web, especialmente no Laravel, enviar emails é uma tarefa comum. Porém, testar o envio de emails... Leia mais
Atualizar valores em um campo JSON no PostgreSQL é uma operação comum ao trabalhar com dados semi-estruturados. Isso é especialmente... Leia mais
Vamos a mais um post HOW TO…. Abra o Terminal: Você pode fazer isso procurando por “Terminal” no menu de... Leia mais