【发布时间】:2013-05-03 13:30:20
【问题描述】:
考虑下面的代码
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 方法,而不是通过 DataManger 类。我们如何解决这个问题?具体来说,是否存在强制调用者通过 DataManager 的模式或机制?是否可以使两个 Instance 类仅对 DataManager 类“可见”。
我知道将两个类设为 DataManager 类的内部类将有助于解决问题,但我想知道是否还有其他“更好”的方法可以做这个?
PS:请忽略类名和实现。这只是一个示例,并非来自任何现实生活中的代码。
语言是 C#
【问题讨论】:
-
您的编程语言是 Java 吗?
-
@BobCromwell 它是 C#
标签: c# methods visibility