每次基于特定属性值的对象的单个实例

本文关键字:对象 单个 实例 属性 于特定 | 更新日期: 2023-09-27 18:04:01

我正在编写一个应用程序,该应用程序监视连接到计算机的USB驱动器,并为每个连接的驱动器维护单独的"活动日志"。我想确保只有一个实例的ActivityLog对象(维护我的活动日志的对象)存在于给定的时间为每个附加驱动器。此实例在附加驱动器时创建,在移除驱动器时销毁。

做这件事的优雅方式是什么?(c#)。我正在考虑工厂模式和单例模式的一些组合(创建ActivityLog对象),但希望得到一些指导。

提前感谢。

"

每次基于特定属性值的对象的单个实例

通过将ActivityLog对象标记为private来隐藏构造函数。然后通过静态Get方法赋予它一些"工厂"能力:

class ActivityLog {
    private static IDictionary<string, ActivityLog> _currentLogs = new Dictionary<string, ActivityLog>();
    private ActivityLog() {
        // your constructor code here
    }
    public static ActivityLog Get(string key) {
        if (_currentLogs.ContainsKey(key)) {
            return _currentLogs[key];
        }
        var newLog = new ActivityLog();
        _currentLogs.Add(key, newLog);
        return newLog;
    }

基本上,您可以为每个USB设备分配自己的密钥(Guid可能不是字符串?),并根据需要多次调用Get。每次调用它时,它都会根据内部列表检查键,然后返回一个已经创建的键。或者创建一个并将其添加到内部列表中。

如果是多线程的,你也可以用一些锁机制来包装它。