带参数的扩展策略模式:如何设置值

时间:2012-07-06 10:51:03

标签: java parameters strategy-pattern

所以基本上我有不同的科学模型(算法)来计算某个值。每个算法都可以使用不同的参数集来微调模型。这些参数必须由用户更改。 (现在它将是一个简单的属性文件)。我正在使用的语言是Java。

所以我试着关注这个出版物

http://www.hillside.net/plop/2010/papers/sobajic.pdf

这是上面pdf的代码示例,我认为它是C#:

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;
    }
}

如何设置参数值?假设具体算法返回2个参数的数组或列表,一个是IntegerParameter,另一个是StringParameter。但是上面解释的模式中的Parameter接口没有setValue方法,因此客户端如何设置参数值并知道其类型?

1 个答案:

答案 0 :(得分:0)

我会将所有参数视为intdouble,即使只有两个可能的值,例如使用0和1而不是true和false。

你的算法需要一个可以改变的参数集合,以便产生结果。