Вы можете использовать Java Generics с Strategy Design Pattern, чтобы преодолеть эту проблему:
позволяет предположить, у вас есть два «дела» case1 и Случай 2, и вы, мы будем называть классы, которые имеют метод йоЗотеЬЫпд() для каждый случай «обработчики».
Сначала мы будем иметь интерфейс, который определяет обработчик:
public interface Handler<TYPE1, TYPE2, TYPE3>{
void doSomething(TYPE1, TYPE2, TYPE3);
void doSomethingElse(TYPE3);
}
ваши обработчики будут выглядеть следующим образом:
public class Case1Handler implements Handler<Case1Type1, Case1Type2, Case1Type3>{
public void doSomething(Case1Type1 t1, Case1Type2 t2, Case1Type3 t3){
// do case 1 business
}
public void doSomethingElse(Case1Type3 t3){
// do case 1 business
}
}
и вы будете иметь аналогичную реализацию Вариант 2.
Теперь вы все еще кодируете ту же работу doSomething() и doSomethingElse() дважды, Strategy Pattern поможет вам здесь.
В основном, у вас есть тот же бизнес, выполненный на разных типах объектов. Вы можете переместить эти отличия в другой класс (Стратегия) и применить эту стратегию к реализации обработчика .
public class HandlerImpl<TYPE1, TYPE2, TYPE3> implements Handler<TYPE1, TYPE2, TYPE3>{
private Strategy<TYPE1, TYPE2, TYPE3> strategy;
public HandlerImpl(Strategy<TYPE1, TYPE2, TYPE3> strategy){
this.strategy = strategy;
}
public void doSomething(TYPE1 t1, TYPE2 t2, TYPE3 t3){
// do your business using "strategy"
}
public void doSomethingElse(TYPE3 t3){
// do your business using "strategy"
}
}
это может показаться излишним, но абсолютно нет. Это сделает ваш код чище, изменения (добавление нового дела, изменение бизнеса) будет проще реализовать :)
Что такое «случай» в этом? Это класс? Существует ли связь между типами параметров? Этот вопрос очень трудно понять. – ftr
Я не совсем понимаю ваши обозначения. Имена классов 'A',' B' и т. Д.? Является ли 'A' в списке параметров тем же« A », что и в« От A »? Какова проблема дизайна? –
Не можете ли вы просто перегрузить? – adarshr