通用设计模式实现建议

本文关键字:实现 设计模式 | 更新日期: 2023-09-27 18:05:54

我正在寻找一些关于以下问题的建议。

我有许多类,它们是许多USB硬件的包装器-例如总线可编程电源,标签打印机,数据采集模块,USB到串行转换器等。

每个类实现一个接口IHardwareDevice,定义如下:

public interface IHardwareDevice
{
    string VID { get; }
    string PID { get; }
}
// Example IHardwareDevice implementation
public class PowerSupply : IHardwareDevice
{
    public string VID
    {
        get { return "0123"; }
    }
    public string PID
    {
        get { return "3210"; }
    }
}

上面的接口允许每个USB设备指定自己的供应商和产品ID。

我还有一个名为DeviceManager的静态类,它使用SetupDixxx设备安装函数来检测上面列出的任何USB设备的存在。该类还具有启用或禁用指定设备的功能。

类的简要概述如下…

public static class DeviceManager
{
    public static T Find<T>() where T : IHardwareDevice, new()
    {
        // Uses the SetupDixxx calls to find a VID and PID match
        // returns new T() or default(T) depending on whether match was found
    }
    public static bool Enable(IHardwareDevice obj)
    {
        // ...
    }
    public static bool Disable(IHardwareDevice obj)
    {
        // ...
    }
}

我曾考虑使用HardwareDeviceAttribute来装饰每个类(属性将包含VID和PID),但我决定反对这一点。

此外,继续前进,我希望每个USB设备类都有自己的属性-例如PortName用于USB到串行转换器,或PathName用于HID设备(允许CreateFile, ReadFile和WriteFile访问)等。所有这些都将从从单个设备注册表分支读取的值中填充(同样使用SetupDixxx函数调用)。我曾考虑扩展IHardwareDevice接口,以包含一个由DeviceManager调用的InitializeDevice方法,但这需要访问硬件类中的许多非托管结构,这似乎是不可取的。另一种选择是装饰USB设备的自定义属性,指示哪些将由DeviceManager填充。

现在,我想我的问题是——这是一个很好的实现我想要达到的目标吗?有没有什么明显的改进是我遗漏的?所有的代码都可以工作,所以从适用性的角度来看,它绝对是好的,但是有没有更好、更干净的实现——工厂(或任何其他)模式在这个实例中会帮助我吗?

提前感谢,K

通用设计模式实现建议

我不是很确定,但我认为建筑商模式可能对你有帮助。如果你通过构建器构造对象,那么你可以只初始化所需数量的属性,而不改变其他属性。wiki链接