Я пытаюсь придумать хороший дизайн для преобразования набора различных объектов в общий объект. По сути, я получаю один (из множества слегка отличающихся) сложный объект из системы A и должен преобразовать его в более простой объект для системы B.
Все объекты, которые я конвертирую, наследуют от одного и того же базового класса, поэтому часть конвертации всегда одна и та же. Но в каждом случае преобразование включает в себя что-то очень специфичное для типа объекта, который я конвертирую. Это может быть RPC, выборка HTTP, поиск в базе данных или что-то совершенно другое.
Я смотрю на Шаблонный метод и Стратегия . Но ни один из них не выглядит идеально подходящим. Проблема в том, что используемый метод / стратегия привязан к типу преобразуемого объекта и поэтому не является взаимозаменяемым.
Это набросок того, о чем я думаю:
class FooConverter {
Map<String, FooConverter> converters;
Foo convert(Bar bar) {
Foo foo = ...; // Common part of the conversion.
FooConverter c = converters.get(bar.getType(), foo);
c.finishConversion(bar, foo);
return foo;
}
}
Меня раздражает, что FooConverter
должен определять дополнительный метод преобразования, который принимает частично преобразованный объект в качестве параметра. Таким образом, я получаю сочетание стратегии (поскольку все преобразователи реализуют один и тот же интерфейс) и метода Template (поскольку общая часть преобразования используется всеми преобразователями). Есть ли лучший способ?