Инкапсулирует бизнес-правило в объект с методом isSatisfiedBy(candidate). Спецификации можно комбинировать (and, or, not).
interface Specification { public function isSatisfiedBy($candidate): bool; }
class ActiveUserSpec implements Specification {
public function isSatisfiedBy($user): bool { return $user->isActive(); }
}
$spec = new ActiveUserSpec()->and(new PremiumSpec());Удобно для фильтрации репозиториев, валидации доменных правил, переиспользуемых условий.