Skip to content
Lucas de Araújo edited this page Aug 3, 2015 · 6 revisions

StrategyManager

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.

Implementação

/**
 * 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);
   }
}

Utilização

$cep = '87710-130';
$dsm = new DeliveryStrategyManager();
return $dsm->getStrategyForContext($cep);