ООП-дизайн: методы интерфейса с параметрами, зависящими от реализации

Субъект уже сказал это:

Я сейчас думаю о следующей проблеме дизайна: я определяю интерфейс для определенного типа объекта, который содержит различные методы. Теперь у меня проблема в том, что для различных реализаций этого интерфейса требуются дополнительные / разные параметры-методы (потому что способ их реализации делает это необходимым), которые я не могу включить в интерфейс, потому что они не являются общими для всех реализации интерфейса.

Теперь я понимаю, что реализации интерфейса могут поставляться со своими собственными файлами свойств, загружая оттуда свои дополнительные параметры, но что, если эти параметры необходимо передать во время выполнения?

В настоящее время я могу думать только о передаче в Сопоставьте параметры для решения этой проблемы - поскольку классы JDK, такие как DocumentBuilderFactory , делают нечто очень похожее, предоставляя такие методы, как setAttribute (String attName, Object attValue) это кажется реальным подходом к решению этой проблемы.Тем не менее мне было бы интересно узнать, как другие решают подобные проблемы, альтернативные идеи?

Я не хочу выводить из интерфейса и добавлять дополнительные методы, так как в моем случае мне пришлось бы выбросить NotImplementException из методы базового интерфейса.

ОБНОВЛЕНИЕ :

Какие могут быть возможные проблемы при использовании подхода Map? Реализующие классы могут полностью игнорировать это, если они не могут использовать дополнительные параметры. Другие могут проверить, содержит ли карта нужные имена параметров, проверить тип их значений и использовать их, если они допустимы, а в противном случае - выбросить исключение. Я также видел, как это используется для абстрактного класса JAXBContext, так что это, кажется, общий подход ..

ОБНОВЛЕНИЕ :

Я решил использовать подход карты, так как я не вижу ничего очевидного. недостатки, и он также используется в JDK (да, я знаю, что это не обязательно много значит :) Поскольку я не могу принять ответ на этот вопрос, я просто проголосую за него. Спасибо за ваш вклад!

с уважением,

- qu

5
задан quaylar 3 February 2012 в 08:05
поделиться