首先,我在一篇文章中读到了这篇文章——它基本上告诉我我根本不应该使用单例——
最常见的是,单例不允许在创建实例时指定任何参数 - 否则对实例的第二次请求但使用不同的参数可能会出现问题!(如果所有具有相同参数的请求都应该访问相同的实例,则工厂模式更合适。)
因为我需要参数,以及具有相同参数的相同实例 - 我得出结论我需要一个工厂模式。
但是我无法在任何地方找到一个好的工厂模式实现。
如果您发现任何带有参数的良好 c# 单例工厂模式实现,请指导我
好的,我将尝试在这里非常具体......希望这能解释我的情况。
替代方法是最受欢迎的。我只是结合了很多实现-我的理解可能不正确。
所以我有一个班级'A'。它是一个用于连接数据库的类——数据库连接。
连接需要 4 个参数 & 约束是:
我需要有多个连接可能 - 使用不同的数据库(参数不同)
我只需要一个特定连接的实例 - 一个参数相同的单例(在我的理解中)
根据上面提到的文章,我需要一个工厂模型,还需要限制连接数,超时后关闭连接等。
在此基础上,我需要一个带有参数/参数的单例工厂......我假设
所以A类看起来像这样
<which access modifier ?> Class A {
private Class A(string hostname, string port, string username, string pw_hash) {
//create a new instance with the specified parameters
}
//other methods on the connection
protected void close() {
//close the connection
}
}
public class AFactory//should it inherit class A?? {
private IList<A> connections = new List<A>();
private AFactory()
{
//do something
}
private static readonly Lazy<AFactory> lazy
= new Lazy<AFactory>(() => new AFactory());
public static AFactory Instance { get { return lazy.Value; } }
public A getA(string hostname, string service, string username, string pw_hash)
{
foreach (A a in A)
{
if (a.hostname == hostname && a.service == service && a.username == username)
return a;
}
A d = new A(hostname, service, username, pw_hash);
connections.Add(d);
return d;
}
现在只要类 A 构造函数是公共的,这就会很好地工作——但这有点违背了单例的目的。我需要做什么才能使此代码正常工作。
对于指定的参数,我只需要 1 个 A 类实例。
谢谢
英德拉吉特