Итак, у меня есть класс AbtractParent и произвольное количество подклассов, расширяющих его.
Каждый подкласс имеет строку, связанную с ним.
В конце концов, я хочу иметь возможность писать код в соответствии с
if(AbstractParent.doesStringRepresentSubClass("example String"))
AbstractParent.getInstOfSubClassReppedBy("example String");
Мое текущее решение - сохранить карту как статическую переменную AbstractParent, и каждый подкласс должен добавить экземпляр себя и свою строку к этой карте.
Проблема в том, что благодаря этому AbstractParent теперь получает знания о каждом из своих подклассов, что кажется противоречащим идеям ООП.
Мои единственные другие решения - это
- имеет файл конфигурации, в котором каждый подкласс записывает свое имя класса и строковое представление
- каждый раз, когда я создаю подкласс, добавляем строку кода в оператор if-else внутри didStringRepresentSubClass.
Является ли их лучший, более ООП-правильный способ сделать это?
Спасибо всем!
Редактировать 1: строковое представление НЕ будет совпадать с именем класса и, следовательно, не может быть приведено к типу с использованием отражения.
Редактировать 2: Конечная цель здесь - следовать принципу Open Close, и поэтому создание подкласса должно требовать редактирования только файла подкласса. Из-за этого фабричный метод не может быть использован для полного решения проблемы.
Тем не менее, разделение моего кода выше и на фабричный класс, и на абстрактный родительский класс, безусловно, хороший дизайн, который я буду реализовывать.