Я пишу поисковый синтаксический анализатор. Существует входной запрос поиска (String), который необходимо преобразовать в отдельный объект условия. ?Шаблон проектирования для создания нескольких объектов одного типа
Например,/perons/д = возраст> 50 & Имя: Майк
Этот запрос будет переводить на два объекта состояния. 1.GreaterThanCondition (String поле, INT значение) 2.LikeCondition (String поле, значение String)
У меня есть 14 таких условий объекты, которые реализуют интерфейс Condition.
Во время выполнения я разбираю условие строки из запроса (например, «возраст> 50»), и мне нужно разработать алгоритм, который бы эффективно преобразовал это условие в соответствующий объект (например, GreaterThanCondition) эффективно.
Вот один алгоритм, о котором я думаю: создайте ConditionFactory. Этот ConditionFactory будет принимать эту строку («возраст> 50») и перебирать существующие 14 фабрик в определенном порядке (по одной фабрике для каждого условия), чтобы соответствовать, если регулярное выражение, определенное на заводе (например, регулярное выражение для GreaterThanConditionFactory может быть [ a-zA-Z0-9] +> + [0-9] +. Основываясь на регулярном выражении, GreaterThanConditionFactory может идентифицировать поле (возраст) и значение (50) из условия и создать объект GreaterThanConditionObject.
При таком подходе, Мне нужно создать 15 заводов и 14 состояния объекта. Я не уверен, что создание многих заводов является хорошим решением. Просьба предложить.
Зачем вам 1 завод на каждое условие? Кроме того, похоже, что вы создали Chain of Responsibility Factory ... который не похож на * ужасную идею. –
@ Elliott Если я поместил все на свою единственную фабрику, в моем ConditionFactory будет слишком много логики и слишком много, если бы были другие условия. Например, код будет выглядеть так: if ("age> 50"). Match (GreaterThanConditionRegex) {найти поле и значение; создать объект GreaterThanConditon; } else {..} –
Вместо одной фабрики рассмотрите [Builder] (http://en.wikipedia.org/wiki/Builder_pattern#Definition). Ваша логика должна куда-то идти. –