Я пишу код, который использует шаблон стратегии, однако я не уверен, что перехожу за борт с количеством используемой абстракции.Я случайным образом генерирую числа для своего приложения, используя различные распределения вероятностей, такие как нормальное распределение или равномерное распределение, или генерирую числа постоянно (совсем не случайно)
Различные алгоритмы имеют разные литеральные типы возврата, некоторые возвращают Ints, тогда как другие возвращаютFloats and Doubles.
Следуя принципу разделения интерфейсов, я создал интерфейсы ITYPEValuePicker, каждый из которых имеет следующее определение:
public interface ITYPEValuePicker
{
public TYPE getTYPE();
}
, где "TYPE" - это определенный тип данных, такой как float, int,и т.д.
Теперь мои случайные алгоритмы реализуют эти интерфейсы и могут использоваться в коде
GaussianValuePicker implements IFloatValuePicker, IDoubleValuePicker
и
UniformValuePicker implements IFloatValuePicker, IDoubleValuePicker, IIntValuePicker
и
ConstantValuePicker implements IIntValuePicker, IFloatValuePicker, IDoubleValuePicker
Значительная часть моего кода зависит от случайно выбранных значений и случайно выбранных алгоритмов для выбора этих значений.Мой вопрос: есть ли причина, по которой я не должен заменять все магические числа этими универсальными «IValuePicker» и иметь фактическое получение любого значения, которое должно быть делегировано определенному алгоритму.
Например:
public class chicken
{
float height;
int age;
public chicken(float height, int age)
{
this.height = height;
this.age = age;
}
public boolean isSuperOld()
{
if (age > 99)
{
return true;
}
return false;
}
}
против
public class chicken
{
IFloatValuePicker height;
IIntValuePicker age;
public chicken(IFloatValuePicker height, IIntValuePicker age)
{
this.height = height;
this.age = age;
}
public boolean isSuperOld()
{
if (age.getInt() > 99)
{
return true;
}
return false;
}
}
извините за надуманный пример, но я надеюсь, что он иллюстрирует почти отсроченный (ленивый [я не уверен, что это правильный термин]?)оценка разных значений.Является ли это примером YAGNI (я так понимаю, является ли это YAGNI или нет, довольно сложным контекстом) или это правильное использование интерфейсов?