我有一些设备类,如以下示例:
public class MoveSensor() {
public uint GetData() {
// Some logic here
}
}
public class TemperatureSensor {
public double GetData() {
// Some logic here
}
}
public class MultiSensorUnit() {
public MultiSensorData GetData() {
// Some logic here
}
}
public class MultiSensorData {
public int SomeSensor1Data { get; set; }
public byte SomeSensor2Data { get; set; }
public double SomeSensor3Data { get; set; }
}
但是我有一个课程可以定期从这些设备收集数据:
public class DataCollector() {
public void CollectData() {
// Here I want to collect a data from all devices
}
}
看起来我应该使用一个接口:
public interface IDataRecievable {
[This is a problem place] GetData();
}
但我不能这样做,因为 GetData() 从不同的设备返回不同的类型。我需要一种设计模式来使 DataCollector 中的设备使用更加通用和通用。
由于所有传感器都返回不同类型的数据,您可以考虑将数据处理转移到每个传感器实现中。如果你能做到,这就是我将如何实现它。
声明一个接口
public interface IDataRecievable<T>
{
T GetData();
void CollectData();
}
和具体的类:
public class MoveSensor : IDataRecievable<uint>
{
public void CollectData()
{
//do collect logic here
}
public uint GetData()
{
//do get data
}
}
public class TemperatureSensor : IDataRecievable<double>
{
public void CollectData()
{
//do collect logic here
}
public double GetData()
{
//do get data
}
}
和数据收集器类
public class DataCollector
{
public void CollectData()
{
var typesToRegister = Assembly.GetExecutingAssembly().GetTypes()
.Where(type => !String.IsNullOrEmpty(type.Namespace))
.Where(type => type.GetInterfaces().Any(x => x.IsGenericType
&& x.GetGenericTypeDefinition() == typeof(IDataRecievable<>)));
foreach (var type in typesToRegister)
{
dynamic sensor = Activator.CreateInstance(type);
sensor.CollectData();
}
}
}
我让所有类都实现 IDataRecievable<>,创建一个实例并调用 CollectData() 方法。如果需要,您始终可以调用 GetData() 而不是 CollectData()。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句