5

我有以下与自定义设备接口的应用程序。该应用程序用于对设备进行编程。

我的应用程序可以从设备读取设置,并将设置编程到设备。这意味着,有两组设置;当前在设备中的一组设置,以及用户通过应用程序输入的一组设置。

有不同的设备类型,都有一些共同的设置和一些设备特定的设置。

我在考虑两个课程,都有完整的设置。两者都使用单例,因此我可以轻松访问整个项目的所有设置。但这感觉不对,关于这种情况的任何提示

4

3 回答 3

2

不是设计模式,但我可能会这样做:

// represents a device with it's settings
public class Device
{
   public string Type { get; set;}

   public List<Setting> Settings { get; set; }
}

// represents a setting, agnostic of which device it applies to
public class Setting
{
   public string Setting { get; set; }

   public string Value { get; set; }
}

// represents mapping which devices has which settings
public class DeviceSettings
{
   public List<string> ApplicableDevices { get; set; }

   public List<Settings> ApplicableSettings { get; set; }
}

不要专注于使用的集合类型。我想你会有更多的属性。

使用此设计,您可以在运行时定义设置并将它们分配给特定设备。

于 2012-11-23T03:46:59.637 回答
0

我可能会这样做(我的 C# 有点生疏,所以不要指望语法是正确的):

class Settings
{
  Settings parent = null;
  Map<String, String> settings;
  String getSetting(String setting)
  {
    if (settings.contains(setting))
      return settings.get(setting);
    else if (parent != null)
      return parent.getSetting(setting);
    else return null;
  }
}

那么通用设置是每个设备的父级,通用设置没有父级。

如何访问/创建这些类将取决于项目的结构。一个包含一组这些类的单例(可能在地图 ( Map<String, Setting>) 中)是一个想法。

以这种方式做事的好处是,子设置也可以选择性地覆盖其父设置的设置。

于 2012-11-23T07:24:11.980 回答
0

看看命令模式。您可以将设置封装在配置对象中,并将其用作控制器类的输入。使用适当的参数配置控制器类后,您可以调用其execute处理数据的方法。

您还可以将其与状态模式策略模式结合以切换处理算法(例如,在一种状态下,处理可能包括将数据发送到设备,而在另一种状态下则从设备接收数据)。

于 2012-11-22T13:42:20.530 回答