我应该使用什么设计模式来概括类似的类用法?

佩佩耶维奇

我有一些设备类,如以下示例:

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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么我应该使用MailChimp或类似的替代定制脚本?

来自分类Dev

我应该使用 .w-100 还是 .row 来制作类似表格的网格设计

来自分类Dev

当您有一堆无法共享接口的极其相似的类时,应该使用哪种正确的设计模式?

来自分类Dev

我应该使用什么来共享功能,模块或类?

来自分类Dev

我应该使用什么来共享功能,模块或类?

来自分类Dev

我应该使用什么聚类将大学聚类为相似的比较组?

来自分类Dev

我应该使用哪种设计模式来更新类型T的对象上的值

来自分类Dev

c#当一个类具有图像和颜色属性时我应该使用什么样的设计模式

来自分类Dev

我可以使用什么设计模式来完成以下任务

来自分类Dev

AngularJs:我应该使用什么来创建我的类库(服务/工厂/提供者)?

来自分类Dev

我应该使用什么类/界面来制作 PowerPoint 图片和图表?

来自分类Dev

使用什么设计模式来实现交易或链接机制

来自分类Dev

我可以使用docker或类似的工具来部署Windows应用程序吗?

来自分类Dev

如何使用C#中的委托来实现使用接口和实现类的类似设计(从Java)

来自分类Dev

使用抽象超类的良好设计模式是什么?

来自分类Dev

如何使用类似的UI materializecss框架进行android设计?

来自分类Dev

我应该使用模型类来创建 SqlConnection 对象吗?

来自分类Dev

我应该安装 Ubuntu 18.04 而不是 20.04 才能使用 Android Studio 并解决类似的兼容性问题吗?

来自分类Dev

使用多个类似的“ while”语句来缩短代码

来自分类Dev

为什么我应该优先使用通配符来输入参数?

来自分类Dev

我应该使用什么规范来记录REST API?

来自分类常见问题

在Django 1.9中,我应该使用什么来代替syncdb?

来自分类Dev

Powershell-我应该使用什么动词来取消删除

来自分类Dev

我应该使用什么组件来显示启用/禁用状态?

来自分类Dev

我应该使用什么来创建网络联系表单?

来自分类Dev

我应该使用什么命令来移动这些特定元素?

来自分类Dev

我应该使用什么技术来优化SQL查询

来自分类Dev

我应该使用什么数据结构来摆脱[]?

来自分类Dev

我应该使用什么生产规则来减少自下而上的解析?

Related 相关文章

  1. 1

    为什么我应该使用MailChimp或类似的替代定制脚本?

  2. 2

    我应该使用 .w-100 还是 .row 来制作类似表格的网格设计

  3. 3

    当您有一堆无法共享接口的极其相似的类时,应该使用哪种正确的设计模式?

  4. 4

    我应该使用什么来共享功能,模块或类?

  5. 5

    我应该使用什么来共享功能,模块或类?

  6. 6

    我应该使用什么聚类将大学聚类为相似的比较组?

  7. 7

    我应该使用哪种设计模式来更新类型T的对象上的值

  8. 8

    c#当一个类具有图像和颜色属性时我应该使用什么样的设计模式

  9. 9

    我可以使用什么设计模式来完成以下任务

  10. 10

    AngularJs:我应该使用什么来创建我的类库(服务/工厂/提供者)?

  11. 11

    我应该使用什么类/界面来制作 PowerPoint 图片和图表?

  12. 12

    使用什么设计模式来实现交易或链接机制

  13. 13

    我可以使用docker或类似的工具来部署Windows应用程序吗?

  14. 14

    如何使用C#中的委托来实现使用接口和实现类的类似设计(从Java)

  15. 15

    使用抽象超类的良好设计模式是什么?

  16. 16

    如何使用类似的UI materializecss框架进行android设计?

  17. 17

    我应该使用模型类来创建 SqlConnection 对象吗?

  18. 18

    我应该安装 Ubuntu 18.04 而不是 20.04 才能使用 Android Studio 并解决类似的兼容性问题吗?

  19. 19

    使用多个类似的“ while”语句来缩短代码

  20. 20

    为什么我应该优先使用通配符来输入参数?

  21. 21

    我应该使用什么规范来记录REST API?

  22. 22

    在Django 1.9中,我应该使用什么来代替syncdb?

  23. 23

    Powershell-我应该使用什么动词来取消删除

  24. 24

    我应该使用什么组件来显示启用/禁用状态?

  25. 25

    我应该使用什么来创建网络联系表单?

  26. 26

    我应该使用什么命令来移动这些特定元素?

  27. 27

    我应该使用什么技术来优化SQL查询

  28. 28

    我应该使用什么数据结构来摆脱[]?

  29. 29

    我应该使用什么生产规则来减少自下而上的解析?

热门标签

归档