Ваш дизайн очень близок к заводскому образцу.«Сборщик» - это фруктовая фабрика, вы запрашиваете фрукт особого типа и получаете этот фрукт.
Часть «запрос» выглядит немного сложнее.Попробуйте использовать перечисления:
public enum FruitType{
APPLE, BANANA
}
public FruitFetcher {
public static Fruit fetch(FruitType type) {
switch(type) {
case APPLE: return new Apple();
case BANANA: return new Banana();
}
}
return null;
}
Редактировать - Это все еще довольно сложно.Требуется некоторое время, чтобы понять, чего вы хотите достичь, и обычно это показатель того, что должен быть более простой дизайн.
Первый - если ваши Request
и Response
классне предлагайте ничего, кроме абстрактных объявлений методов, тогда вы должны рефакторинг вашего кода, код обоих типов как интерфейсы.Один шаг к улучшению читабельности.
Второй - метод getResponse может быть значительно упрощен.Вам не нужна эта (безобразная) конструкция getName - просто проверьте тип объекта запроса:
public Response getResponse(Request request){
Response aResponse = null;
if(request instanceof SetPinResponse) {
aResponse = new SetPinResponse((SetPinRequest) request);
} else if (request instanceof MakePaymentResposne) {
aResponse = new MakePaymentResposne((MakePaymentRequest) request);
}
return aResponse;
}