我正在编写一个应用程序来监视连接到计算机的USB驱动器,并为每个连接的驱动器维护一个单独的“活动日志”。我想确保每个连接的驱动器在给定时间只存在一个ActivityLog对象实例(维护我的活动日志的对象)。连接驱动器时会创建此实例,并在删除驱动器时将其销毁。
这样做的优雅方式是什么? (在C#中)。我正在考虑工厂和单例模式的一些组合(以创建ActivityLog对象),但我们会很感激一些指导。
提前致谢。
FIKE
答案 0 :(得分:2)
隐藏ActivityLog
对象的构造函数,方法是将其标记为私有...然后给它一些" factory"通过静态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设备分配自己的密钥(A Guid可能代替字符串?)并根据需要多次调用Get
。每次调用它时,都会检查其内部列表中的密钥,并返回已创建的密钥..或者创建一个密钥并将其添加到内部列表中。
如果是多线程,你也可以用一些锁定机制包装它。