C# singleton c的多个实例#
是否实现了一种类似于单例的模式,允许创建多个实例 我的班级定义是:C# singleton c的多个实例#,c#,singleton,C#,Singleton,是否实现了一种类似于单例的模式,允许创建多个实例 我的班级定义是: public class Logger { private Logger(string logPath) { this.logPath = logPath; } /// <summary> /// Creates singleton /// </summary> /// <param name="logPath">&
public class Logger
{
private Logger(string logPath)
{
this.logPath = logPath;
}
/// <summary>
/// Creates singleton
/// </summary>
/// <param name="logPath"></param>
/// <returns></returns>
public static Logger GetInstance(string logPath)
{
lock (instanceLock)
{
if (logger == null)
{
logger = new Logger(logPath);
}
}
return logger;
}
public static Logger Instance()
{
return logger;
}
/// <summary>
/// Destructor
/// </summary>
~Logger()
{
try
{
this.Close();
}
catch (Exception)
{
}
}
}
公共类记录器
{
专用记录器(字符串日志路径)
{
this.logPath=logPath;
}
///
///创造单身
///
///
///
公共静态记录器GetInstance(字符串日志路径)
{
锁(instanceLock)
{
如果(记录器==null)
{
记录器=新记录器(logPath);
}
}
返回记录器;
}
公共静态记录器实例()
{
返回记录器;
}
///
///析构函数
///
~Logger()
{
尝试
{
这个。关闭();
}
捕获(例外)
{
}
}
}
是否实现了一种类似于单例的模式,它允许创建多个实例
如果需要多个实例,只需允许直接构造类,而不要将其设置为单实例。在您的情况下,只需将构造函数公开,并删除单例/实例逻辑
也就是说,有一个接口,它允许通过单个接口对多个实例进行键控访问
是否实现了一种类似于单例的模式,它允许创建多个实例
如果需要多个实例,只需允许直接构造类,而不要将其设置为单实例。在您的情况下,只需将构造函数公开,并删除单例/实例逻辑
也就是说,有一个,它允许通过一个接口对多个实例进行键控访问。这是我使用的模式:
public class Logger
{
private Logger(...) { ... }
static Logger { /* initialize Errors, Warnings */ }
public static Logger Errors { get; private set; }
public static Logger Warnings { get; private set; }
public void Write(string message) { ... }
}
如果您想要一个静态记录器查找(字符串名称)
方法,您也可以这样做
现在,在其他代码中,您可以编写Logger.Errors.write(“一些错误”)代码>或记录器。警告。写入(“一些警告”)代码>
奖励:您可以在写入方法中使用环境。StackTrace
来额外记录您调用的写入方法。这是我使用的模式:
public class Logger
{
private Logger(...) { ... }
static Logger { /* initialize Errors, Warnings */ }
public static Logger Errors { get; private set; }
public static Logger Warnings { get; private set; }
public void Write(string message) { ... }
}
如果您想要一个静态记录器查找(字符串名称)
方法,您也可以这样做
现在,在其他代码中,您可以编写Logger.Errors.write(“一些错误”)代码>或记录器。警告。写入(“一些警告”)代码>
奖励:您可以在Write
方法中使用环境。StackTrace
来额外记录您调用的Write
方法。LoggerFactory
?顺便说一句,implementIDisposable
Interface不确定这里的重点是什么,看起来你只是为一个类的实例提供了一个包装器?请解释一下你所说的“一个类似于单例的模式,它允许多个实例。”我想这就是所谓的“一个不遵循单例模式的常规类”允许您创建多个实例的单例只是一个类。使用单例,然后创建多个实例是没有意义的。听起来更像是一个返回实例的工厂。如果您正在寻找一个特定的实例,我想工厂可以跟踪它们,并且您可以使用一个字符串键来标识它,但我不知道我是否建议工厂跟踪它提供的实例。LoggerFactory
?顺便说一句,implementIDisposable
Interface不确定这里的重点是什么,看起来你只是为一个类的实例提供了一个包装器?请解释一下你所说的“一个类似于单例的模式,它允许多个实例。”我想这就是所谓的“一个不遵循单例模式的常规类”允许您创建多个实例的单例只是一个类。使用单例,然后创建多个实例是没有意义的。听起来更像是一个返回实例的工厂。如果您正在寻找一个特定的实例,我想工厂可以跟踪它们,您可以用一个字符串键来标识它,但我不知道我是否建议工厂跟踪它提供的实例。@IlyaIvanov很难知道-原始问题中没有足够的细节来知道需要什么。我提到Multiton是因为~在日志类型的类中,允许访问不同的“logger”目标是有意义的。是的,我只是认为他使用string
作为intances的键,所以很难知道应该事先填充多少实例。他还使用了一些资源,如果这些资源是由池管理的,而不是由user@IlyaIvanov难以知道-原始问题中没有足够的细节来知道需要什么。我提到Multiton是因为~在日志类型的类中,允许访问不同的“logger”目标是有意义的。是的,我只是认为他使用string
作为intances的键,所以很难知道应该事先填充多少实例。他还使用了一些资源,如果这些资源是由池管理的,而不是由用户管理的,那就太好了