У меня реализован следующий шаблон стратегии:
public abstract class RetrievalStrategy {
public abstract List<MyObject> retrieve();
}
public class LimitRetrievalStrategy extends RetrievalStrategy {
public int limit;
public LimitRetrievalStrategy(int limit) {
this.limit = limit;
}
public List<MyObject> retrieve() {
// fill up the list and return it, limiting to 'limit' results
return new ArrayList<MyObject>(limit);
}
}
public class SpeedRetrievalStrategy extends RetrievalStrategy {
public int speed;
public SpeedRetrievalStrategy(int speed) {
this.speed = speed;
}
public List<MyObject> retrieve() {
// do something with the speed and return list again
return new ArrayList<MyObject>();
}
}
Мое клиентское приложение получает от пользователя либо скорость, либо ограничение (и, возможно, другие параметры).Я хочу создать фабричный класс, который будет возвращать правильную стратегию на основе параметров, которые имеют значение, и параметров, которые не имеют.Я не хочу, чтобы клиент решал, какую стратегию следует вернуть.Должен ли фабричный метод createStrategy(params)
иметь операторы if
для каждого параметра и в зависимости от различных комбинаций (представьте, что есть другие классы Стратегии) возвращать класс Конкретной Стратегии?Как правильно это сделать?