日期:2014-05-20 浏览次数:21059 次
/// <summary>
/// 工序类
/// </summary>
public class Process
{
public string ProcessNo
{
get; set;
}
public string ProcessDesc
{
get; set;
}
public CalcMethodInfo GetMethod { get; set; }
public CalcMethodInfo SetMethod { get; set; }
public float Size
{
get
{
return CalcMethodManager.Instance[GetMethod.MethodName].GetSize();
}
set
{
CalcMethodManager.Instance[SetMethod.MethodName].SetSize(value);
}
}
}
/// <summary>
/// 计算方法信息类
/// </summary>
public class CalcMethodInfo
{
public string MethodName { get; set; }
public object[] Args { get; set; }
}
/// <summary>
/// 负责计算方法注册、调用的管理类。
/// 可以考虑用配置文件,部署运行起来方便
/// </summary>
public class CalcMethodManager:Dictionary<string, CalcMethodBase>
{
/// <summary>
/// 注册计算方法
/// </summary>
/// <param name="calcMethod"></param>
public void Register(CalcMethodBase calcMethod)
{
Add(calcMethod.Name, calcMethod);
}
public static CalcMethodManager Instance = new CalcMethodManager();
CalcMethodManager()
{
//可以在此从配置文件读出方法,并登记。也可以程序中手工调用Register方法注册。
}
}
/// <summary>
/// 方法类。
///可以考虑配置,部署运行起来方便
/// </summary>
public abstract class CalcMethodBase
{
public string Name { get; set; }
/// <summary>
/// 以下2个方法在子类中必须被重写
/// </summary>
/// <returns></returns>
public virtual float GetSize() { throw new NotImplementedException(); }
public virtual void SetSize(float value) { throw new NotImplementedException(); }
}
/// <summary>
/// 计算方法的一个实例类。
/// 可以将类的Namespace,assembly信息写入配置文件,为了CalcMethodManager可以自动读取
/// </summary>
public class CalcMethodM1:CalcMethodBase
{
public int Size1 { get; set; }
public int Size2 { get; set; }
public override float GetSize()
{
//换成需要的算法
return Size1 + Size2;
}
public override void SetSize(float value)
{
//换成需要的算法
Size1 = (int)value/2;
Size2 = (int)(value - Size1);
}
}