Я пытаюсь переписать некоторый код, чтобы разбить некоторые проблемы с связью и облегчить его модификацию в будущем.Шаблон, где только один обработчик многих должен действовать на основе специализации
Прямо сейчас, у меня есть метод статических фабричного в базовый классе, который, в зависимости от ситуации, выбирает соответствующую реализации. Решение основано на степени специализации:
While типов А и В как можно справиться с этим, B был разработан специально для этой ситуации и является правильным выбором.
базовый класс, поэтому тесно связан со всеми реализациями и этот метод должен быть переписано при создании новых специализированных реализаций.
Я думаю об использовании шаблона Chain of Responsibility, чтобы разбить эту муфту. Тем не менее, я не вижу способа обеспечить выполнение наиболее подходящей реализации. Если я дам это реализациям, чтобы сделать это определение, я не могу гарантировать, что они будут запрошены в порядке специализации, не сталкиваясь с теми же проблемами связи.
Есть ли какие-либо шаблоны или методы для обработки подобных ситуаций? (Мое лучшее предположение мешает развертыванию, я сохраню его в своем заднем кармане, чтобы все не сказали «да, это единственный способ сделать это!»)
Это только часть решения. Проще, к сожалению. Как количественно оценить их способность справляться с ситуацией, не зная их реализации, а затем сравнить ее с возможностями других реализаций, не зная, что все возможные ситуации и переменные заранее являются липкой частью. – Will
@Will: Я вижу суть вашего вопроса. Вы пытаетесь определить, как кипятить «можно справиться с этой ситуацией» вплоть до числового значения, которое может быть связано с каждой реализацией. Я спрашиваю в ответ: какая проблема вы решаете, для чего нужен этот механизм? –
Хотел бы я сварить его до номера! Не вдаваясь в подробности, я пытаюсь взаимодействовать с разными окнами. Я должен обрабатывать, скажем, окна IE иначе, чем, например, окна апплетов Java. И если они не применяются, тогда как простое старое окно Win32. Чем больше я знаю о окне (который является сложным процессом, зависящим от типа окна), тем лучше я могу его обработать. Он может в конечном итоге распространиться на приложение, которому принадлежит окно. Я не могу стоять вне процесса и выбирать лучшего обработчика, если я не знаю, какой тип окна, и это знание связано с обработчиком. – Will