расширенный паттерн стратегии с параметрами: как установить значения

Так что в основном у меня есть разные научные модели (алгоритмы) для вычисления определенного значения. Каждый алгоритм может иметь разный набор параметров для точной настройки модели. Эти параметры должны быть доступны для изменения пользователем. (пока это будет простой файл свойств). Я использую язык 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, и, следовательно, как клиент может установить значение параметра и узнать его тип?


person beginner_    schedule 06.07.2012    source источник
comment
Можете ли вы привести пример того, что вы пытаетесь сделать? Я бы начал с вашего требования и нашел решение, а не начал с решения и попытался сделать его подходящим для вашей проблемы.   -  person Peter Lawrey    schedule 06.07.2012
comment
Предсказать свойство вещества (например, температуру кипения). Для этого существуют разные модели (алгоритмы), и каждый алгоритм может иметь разное количество параметров, и пользователь должен иметь возможность выбрать алгоритм и установить значения параметров выбранного алгоритма.   -  person beginner_    schedule 06.07.2012


Ответы (1)


Я бы рассматривал все параметры как int или double, даже если есть только два возможных значения, например. используйте 0 и 1 вместо true и false.

Вашему алгоритму нужна коллекция параметров, которые можно изменить, чтобы получить результат.

person Peter Lawrey    schedule 06.07.2012
comment
Пока я могу жить только с использованием double, но все же, может ли кто-нибудь объяснить мне, как можно реализовать шаблон, описанный в ссылке? Я действительно не понимаю, как... - person beginner_; 07.07.2012
comment
Я тоже не думаю, что это особенно полезно. - person Peter Lawrey; 08.07.2012