肯定這不是最好的標題。我正在創建一個系統來產生數學問題。開發人員必須實現兩個接口:如何維持兩個班級之間的溝通?
Problem
:這包含需要生成問題的屬性。Configuration
:這是生成Problem
的範圍參數。
這些接口:
public abstract class Problem
{
}
public abstract class Configuration
{
}
這裏是爲BinaryProblem一個例子。
public class BinaryProblem : Problem
{
public decimal X { get; set; }
public decimal Y { get; set; }
public BinaryProblem(decimal x, decimal y)
{
this.X = x; // Number 1
this.Y = y; // Number 2
}
}
public class BinaryProblemConfiguration : Configuration
{
// Range for X
public int XMin { get; set; }
public int XMax { get; set; }
// Range for Y
public int YMin { get; set; }
public int YMax { get; set; }
public BinaryProblemConfiguration() { }
}
你能看到問題與配置之間的界限嗎?我需要放置許多實現這兩個接口的模塊。
所以,我需要一種方法來生成它們。我想在創建一個抽象類,其中包含:
protected static Random
:幾乎所有的配置需要一個隨機的類來創建數字(即random.Next(X1, Y1);
)。而且必須是靜態的,因爲需要始終使用相同的種子創建數字。public abstract TProblem Generate(TConfiguration config); // where : TProblem : Problem, new(), TConfiguration : Configuration
和實施的每個問題類型這個抽象類。
我的問題是:這是一個開始解決這個解決方案的好方法,還是我必須做的其他解決方案?
編輯:我試圖一個例子是:
這是我的抽象類,我的意思是我的想法是,當你實例化這個類,您所指定的通用值:
public interface IProblemFactory
{
Problem CreateProblem();
}
public abstract class ProblemBaseFactory<TProblem, TConfiguration> : IProblemFactory
where TProblem : Problem
where TConfiguration : Configuration
{
private const int SEED = 100;
protected TConfiguration _config;
protected static Random _random;
public ProblemBaseFactory(TConfiguration config)
{
_config = config;
if (_random == null) _random = new Random(SEED);
}
public void SetSeed(int newSeed)
{
_random = new Random(newSeed);
}
public Problem CreateProblem()
{
return CreateProblem(_config);
}
public abstract TProblem CreateProblem(TConfiguration config);
}
public class BinaryProblemFactory : ProblemBaseFactory<BinaryProblem, BinaryProblemConfiguration>
{
public override BinaryProblem CreateProblem(BinaryProblemConfiguration config)
{
var x = GenerateValueInRange(_config.Range1);
var y = GenerateValueInRange(_config.Range2);
return new BinaryProblem(x, y, Operators.Addition);
}
private decimal GenerateValueInRange(Range<int> range)
{
return _random.Next(range.MinValue, range.MaxValue);
}
}
Sorr,我不明白如何從'問題'和'配置'派生的類應該使用。你可以添加一個使用的例子嗎? – MiMo 2012-03-24 00:51:50
爲什麼X,X1和Y1的範圍以及Y,X2,Y2的範圍。 Yech!使用XMin和XMax等。 – 2012-03-24 01:19:03
我已添加新信息:) – 2012-03-24 17:15:11