https://github.com/combizera/alura-design-patterns
https://github.com/combizera/alura-design-patterns
Last synced: 8 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/combizera/alura-design-patterns
- Owner: combizera
- Created: 2024-11-25T12:52:02.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-12-19T16:39:06.000Z (over 1 year ago)
- Last Synced: 2024-12-19T17:37:47.316Z (over 1 year ago)
- Language: PHP
- Size: 14.6 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Alura - Design Patterns em PHP: Padrões comportamentais
## Strategy
### O que é
O padrão de projeto Strategy é um padrão comportamental que permite definir uma família de algoritmos, encapsulá-los e torná-los intercambiáveis. Esse padrão permite que o algoritmo varie independentemente dos clientes que o utilizam.
## Quando usar o Padrão Strategy?
Utilize o padrão Strategy quando:
- Você tem várias maneiras de realizar uma ação e deseja encapsular cada uma delas.
- Você deseja evitar o uso de condicionais complexos (como `if` ou `switch-case`) para escolher um algoritmo.
- Você quer que o comportamento de um objeto possa ser alterado em tempo de execução.
## Como funciona?
O padrão Strategy envolve três componentes principais:
1. **Contexto**: A classe que utiliza a estratégia. Ela mantém uma referência a uma instância de uma estratégia.
2. **Estratégia**: Uma interface comum para todas as estratégias concretas.
3. **Estratégias Concretas**: Implementações específicas da interface de estratégia.
### Exemplo de Implementação
```php
// Interface da estratégia
interface Imposto {
public function calculaImposto(float $orcamento): float;
}
// Estratégia concreta: ICMS
class ICMS implements Imposto {
public function calculaImposto(float $orcamento): float {
return $orcamento * 0.10; // 10% do valor
}
}
// Estratégia concreta: ISS
class ISS implements Imposto {
public function calculaImposto(float $orcamento): float {
return $orcamento * 0.06; // 6% do valor
}
}
// Contexto
class CalculadoraImposto {
private $imposto;
public function __construct(Imposto $imposto) {
$this->imposto = $imposto;
}
public function calcular(float $orcamento): float {
return $this->imposto->calculaImposto($orcamento);
}
}
// Uso
$orcamento = 1000;
$calculadoraICMS = new CalculadoraImposto(new ICMS());
echo $calculadoraICMS->calcular($orcamento); // Saída: 100
$calculadoraISS = new CalculadoraImposto(new ISS());
echo $calculadoraISS->calcular($orcamento); // Saída: 60
```
---