Пример
interface SortStrategy {
sort(array $data): array;
}
class QuickSort implements SortStrategy { ... }
class MergeSort implements SortStrategy { ... }
class Sorter {
public function __construct(private SortStrategy $strategy) {}
public function sort(array $data): array {
return $this->strategy->sort($data);
}
}
Когда применять
- Есть несколько вариантов одного алгоритма и нужно переключаться между ними
- Хотите избежать больших if/switch в коде, выбирающем алгоритм
- Поведение должно конфигурироваться снаружи или меняться в runtime