StrategyManager
Lucas de Araújo edited this page Aug 3, 2015
·
6 revisions
O StrategyManager, dentro do sistema, será a engrenagem responsável pela leitura do contexto, e definição da estratégia para a qual o resultado será direcionado, funcionando como um mediador, entre a requisição, e a resposta. Para criar um mediador, basta estender a classe AbstractStrategyManager, adicionar suas estratégias, escrever a rotina de leitura e retorno das estratégias, como no exemplo a seguir.
/**
* Mediador de seleção de estratégias para envio de pacotes.
*/
class DeliveryStrategyManager extends AbstractStrategyManager
{
/**
* Define as estratégias disponíveis
*/
public function configure()
{
$this->addStrategy('Default', new DefaultPackageStrategy());
$this->addStrategy('Sedex', new SedexPackageStrategy());
$this->addStrategy('Sedex10', new Sedex10PackageStrategy());
$this->addStrategy('PAC', new PacPackageStrategy());
}
/**
* Seleciona a melhor estratégia para o contexto
*/
private function matchBetterStrategyForContext($context)
{
/*switch($context)
{
case: 'Something':
return ...;
}*/
}
/**
* Faz a leitura de um contexto e retorna a estratégia adequada
*/
public function getStrategyForContext($context)
{
$strategyName = $this->matchBetterStrategyForContext($context);
return $this->getStrategy($strategyName);
}
}
$cep = '87710-130';
$dsm = new DeliveryStrategyManager();
return $dsm->getStrategyForContext($cep);