В настоящее время я заканчиваю проект на PHP, но общие принципы ОО по-прежнему применяются.
У меня есть родительский класс с именем Node, который является абстрактным, то есть его нельзя создать.Есть много классов, которые расширяют Node и являются экземплярами.Некоторые из них включают Event, Person и Project.
Проблема, с которой я сталкиваюсь, заключается в том, что мне часто нужно создавать экземпляры Node, не зная, какой это будет дочерний класс.Все Node и node-sub-классы всегда принимают один и тот же тип объекта (строку из базы данных) в качестве аргумента для конструктора.Чтобы обойти проблему незнания того, какой тип реализации мне нужен, я создал простой статический класс, который будет возвращать правильный подкласс узла.Пример этого кода выглядит следующим образом:
<?php
class NodeClassRegistry{
public static function init_class($node) {
switch ($node->type) {
case 'person':
return new Person($node);
case 'event':
return new Event($node);
}
}
}
?>
Мне кажется, это очень плохой дизайн - это своего рода фабричный шаблон, но он действительно привязан к глобальному состоянию.Есть ли шаблон проектирования, который подойдет для этой ситуации?