Разумно ли логика принадлежит самой Criteria
? Если это так, поместите его в интерфейс Criteria
и реализуйте его соответствующим образом для каждого конкретного класса, реализующего интерфейс Criteria
. Это, очевидно, хороший полиморфный подход.
К сожалению, в реальной жизни ОО не всегда работает так просто - иногда не имеет смысла помещать поведение для каждого типа в сам тип, поэтому вам, возможно, придется использовать instanceof
вместо этого. Вы могли бы потенциально иметь карту из "класса критериев" к какому-либо интерфейсу, представляющему действие, которое нужно выполнить, но это может в конечном итоге стать еще более запутанным.
Двойная отправка через шаблон посетителя может иногда немного улучшить вещи - так что логика все еще может быть в отдельных методах в вашем "вызывающем" классе, но каждый Criteria
можно вызвать обратно к нужному методу через единственный интерфейсный метод. Лично я склонен считать, что это усиливает сцепление и быстро становится ужасным, но другие клянутся этим.