每次基于特定属性值的对象的单个实例
本文关键字:对象 单个 实例 属性 于特定 | 更新日期: 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
。每次调用它时,它都会根据内部列表检查键,然后返回一个已经创建的键。或者创建一个并将其添加到内部列表中。
如果是多线程的,你也可以用一些锁机制来包装它。