我有以下与自定义设备接口的应用程序。该应用程序用于对设备进行编程。
我的应用程序可以从设备读取设置,并将设置程序设置到设备。这意味着,两套设置;当前在设备中的一组设置,以及用户通过应用程序输入的一组设置。
有不同的设备类型,都有一些共同的设置和一些特定的设备。
我在考虑两个类,包括完整的设置。两者都使用单身,所以我可以轻松访问整个项目的所有设置。但这感觉不对,关于这种情况的任何提示
答案 0 :(得分:1)
不是设计模式,但我可能会这样做:
// 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; }
}
不要专注于使用的集合类型。我想你会有更多的属性。
使用此设计,您可以在运行时定义设置并将其分配给特定设备。
答案 1 :(得分:0)
看看Command pattern。您可以将设置封装在配置对象中,并将其用作控制器类的输入。在使用适当的参数配置控制器类之后,您只需调用其将处理数据的execute
方法。
您也可以将此加入State pattern或Strategy pattern以切换处理算法(例如,在一种状态下,处理可能包括将数据发送到设备,而另一种状态则从设备接收数据)。
答案 2 :(得分: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>
))是一个想法。
以这种方式做事的好处是,子设置也可以选择覆盖它的父设置。