考虑以下代码
我知道将这两个类作为DataManager类的内部类可以帮助解决问题,但我想知道是否有其他“更好”的方法来解决这个问题? PS:请忽略类名和实现。这只是一个示例,不是从任何实际代码中提取的。 语言是C#。
class SqlInstance
{
private SqlInstance()
{
}
public void Connect(string username, string password)
{
//connect
}
public void Disconnect()
{
//disconnect
}
//This method is not a singleton. Its one instance per key
public static SqlInstance GetInstance(string key)
{
return new SqlInstance();
}
}
class FileInstance
{
private FileInstance()
{
}
//no this is not a mistake. This connect has no parameters
private void Connect()
{
//connect
}
public void Disconnect()
{
//disconnect
}
//This method is not a singleton. Its one instance per key
public static FileInstance GetInstance(string key)
{
return new FileInstance();
}
}
class DataManager
{
SqlInstance GetSqlChannelInstance()
{
//if some logic
return SqlInstance.GetInstance("dev.1");
//if some other logic
return SqlInstance.GetInstance("dev.2");
//...and so on
}
FileInstance GetFileInstance()
{
//if some logic
return FileInstance.GetInstance("fil.1");
//if some other logic
return FileInstance.GetInstance("fil.2");
//...and so on
}
}
DataManager是一个包装类,调用者必须使用它来获取SqlInstance或FileInstance的实例。问题在于,调用者可以直接调用这些类的GetInstance方法,而不是通过DataManager类。我们如何解决这个问题?具体来说,有没有一种模式或机制强制调用者通过DataManager呢?是否可能将这两个Instance类仅“公开”给DataManager类?我知道将这两个类作为DataManager类的内部类可以帮助解决问题,但我想知道是否有其他“更好”的方法来解决这个问题? PS:请忽略类名和实现。这只是一个示例,不是从任何实际代码中提取的。 语言是C#。