Так что в основном у меня есть разные научные модели (алгоритмы) для вычисления определенного значения. Каждый алгоритм может иметь разный набор параметров для точной настройки модели. Эти параметры должны быть доступны для изменения пользователем. (пока это будет простой файл свойств). Я использую язык Java.
Поэтому я попытался следить за этой публикацией
http://www.hillside.net/plop/2010/papers/sobajic.pdf
Вот пример кода из приведенного выше pdf, я предполагаю, что это С#:
abstract class Algorithm
{
public Algorithm()
{ }
protected Parameter[] parameters;
public Parameter[] getParameters()
{ return parameters.copy(); }
public abstract void execute();
}
abstract class Parameter
{
private string name;
public string GetName()
{ return name; }
public Parameter(string name)
{ this.name = name; }
}
class BoolParameter : Parameter
{
private bool Value;
public bool GetValue()
{ return Value; }
public void SetValue(bool value)
{ Value = value; }
public BoolParameter(string name, bool defaultvalue)
: base(name)
{
Value = defaultvalue;
}
}
class IntParameter : Parameter
{
private int min;
private int max;
private int Value;
public int GetValue()
{ return Value; }
public void SetValue(int value)
{
if (value < min)
throw new ArgumentOutOfRange(GetName() + " can’t be less than " + min);
if (value > max)
throw new ArgumentOutOfRange(GetName() + " can’t be greater than " + max);
Value = value;
}
public IntParameter(string name, int min, int max, int defaultvalue) : base(name)
{
this.min = min;
this.max = max;
Value = defaultvalue;
}
}
Как установить значения параметров? Предположим, что конкретный алгоритм возвращает массив или список из двух параметров: один IntegerParameter, другой StringParameter. Однако интерфейс параметров в объясненном выше шаблоне не имеет метода setValue, и, следовательно, как клиент может установить значение параметра и узнать его тип?