Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 哪些设计模式对此有用?_C#_Design Patterns_Device Manager - Fatal编程技术网

C# 哪些设计模式对此有用?

C# 哪些设计模式对此有用?,c#,design-patterns,device-manager,C#,Design Patterns,Device Manager,我有一个低水平的编程设备。我给每个新设备和升级的版本号。我还有一个与这些设备通信的程序(用于检索这些设备上的信息) 例如,v1.2发送此类字符串: v1.2|Time|Conductivity|Repetation|Time|Heat of First Nozzle|Pressure|EndOfMessage 但新版本的设备程序: v1.3|Time|Conductivity|Repetation|Time|Humadity|1st Nozzle Heat;2nd Nozzle Heat|Pr

我有一个低水平的编程设备。我给每个新设备和升级的版本号。我还有一个与这些设备通信的程序(用于检索这些设备上的信息)

例如,
v1.2
发送此类字符串:

v1.2|Time|Conductivity|Repetation|Time|Heat of First Nozzle|Pressure|EndOfMessage
但新版本的设备程序:

v1.3|Time|Conductivity|Repetation|Time|Humadity|1st Nozzle Heat;2nd Nozzle Heat|Pressure|EndOfMessage

我的测试应用程序将检索信息,并更改此设备的操作有些操作在
v1.2
设备中会有一些没有。
我认为策略设计模式对于这种情况似乎有用,但我不确定。我应该使用哪种设计模式来实现这一点?

我觉得策略和工厂方法可以解决这个问题。

我觉得策略和工厂方法可以解决这个问题。

是的,这将是一个很好的策略模式用例,尽管您也将使用工厂模式来创建特定的解析器实例

然后,您的代码通常应如下所示:

public DeviceInfo Parse(InputData input)
{
    var version = versionParser.Parse(input);
    var concreteParser = parserFactory.CreateFor(version);
    var data = concreteParser.Parse(data);
    return data;
}
对于具有少量解析器的简单项目,您可以硬编码解析器工厂:

public class ParserFactory
{
    public static IParser<DeviceInfo> CreateFor(Version version)
    {
        // instantiate proper parser based on version
    }
}
公共类ParserFactory
{
公共静态IParser CreateFor(版本)
{
//根据版本实例化适当的解析器
}
}

根据项目的大小,您还可以决定为解析器使用插件模式(包含用于管理插件的有用类)。

是的,这将是策略模式的一个很好的用例,尽管您也将使用工厂模式创建特定的解析器实例

然后,您的代码通常应如下所示:

public DeviceInfo Parse(InputData input)
{
    var version = versionParser.Parse(input);
    var concreteParser = parserFactory.CreateFor(version);
    var data = concreteParser.Parse(data);
    return data;
}
对于具有少量解析器的简单项目,您可以硬编码解析器工厂:

public class ParserFactory
{
    public static IParser<DeviceInfo> CreateFor(Version version)
    {
        // instantiate proper parser based on version
    }
}
公共类ParserFactory
{
公共静态IParser CreateFor(版本)
{
//根据版本实例化适当的解析器
}
}

根据项目的大小,您还可以决定为解析器使用插件模式(包含用于管理插件的有用类)。

这是一个很好的答案。我还要指出,这是一个很好的回答,技术性不强。我还要指出技术性不强的地方