interface RetryStrategyFactory
{
public function createFromArray(array $data) : RetryStrategy;
}
class RetryHandler implements Handler
{
...
public function setStrategyFactory(string $name, RetryStrategyFactory $factory) : self
{ ... }
public function handle(Task $task, Queue $queue): void
{
...
$strategy = $this->factories[$strategyName]->createFromArray($retryOptions);
...
}
}
$retryHandler = (new RetryHandler())
->setStrategyFactory(RetryStrategies::CONSTANT, new ConstantRetryStrategyFactory())
->setStrategyFactory(RetryStrategies::LINEAR, new LinearRetryStrategyFactory())
;