【发布时间】:2018-04-19 17:31:45
【问题描述】:
我必须解决我需要为每种传感器类型进行不同计算的问题(我需要决定在运行时实例化哪种类型)。 让我举个例子:
1.从数据库表我得到这个结果:
SensorType RawValue ADCGain R0Value I0Value ABCValue
1 100 0.1 NULL NULL NULL
1 150 0.2 NULL NULL NULL
2 30 NULL 1 2 2
2 15 NULL 5 5 6
假设传感器类型 1 是具体类型 AISensor 并且继承自基类,类型 2 是 Pt100Tempsensor 并且继承自同一个基类。 这是 C# 中的类定义:
public abstract class Sensor
{
public abstract int Id { get; set; }
public abstract string Code { get; set; }
public abstract string Name { get; set; }
public abstract double GetCalculatedValue(int rawValue);
}
public class Pt100Tempsensor : Sensor
{
public int R0Value { get; set; }
public int I0value { get; set; }
public int ABCValue { get; set; }
public override int Id { get; set; }
public override string Code { get; set; }
public override string Name { get; set; }
public override double GetCalculatedValue(int rawValue)
{
return ((R0Value * I0value) / ABCValue) * rawValue;
}
}
public class AISensor : Sensor
{
public int AdcGain { get; set; }
public override int Id { get; set; }
public override string Code { get; set; }
public override string Name { get; set; }
public override double GetCalculatedValue(int rawValue)
{
return rawValue * AdcGain;
}
}
现在我想知道在运行时实例化对象的最佳方法是什么,如果我添加新的传感器类型,我不需要更改现有代码(比如在简单的工厂方法“模式”中)。
感谢您的帮助。
【问题讨论】:
-
是的,使用简单的工厂模式。
标签: c# inheritance polymorphism instantiation factory-pattern