> */ private $checkerCache = []; private AssignmentCheckerFactory $factory; public function __construct(AssignmentCheckerFactory $factory) { $this->factory = $factory; } public function check(User $user, Entity $entity): bool { $entityType = $entity->getEntityType(); $checker = $this->getChecker($entityType); return $checker->check($user, $entity); } /** * @return AssignmentChecker */ private function getChecker(string $entityType): AssignmentChecker { if (!array_key_exists($entityType, $this->checkerCache)) { $this->loadChecker($entityType); } return $this->checkerCache[$entityType]; } private function loadChecker(string $entityType): void { $this->checkerCache[$entityType] = $this->factory->create($entityType); } }