我正在编写一个相当简单的程序,它可以"连接"到几种不同类型的数据源,包括文本文件和各种数据库.我决定将这些连接类型中的每一个实现为从名为iConnection的接口继承的类.所以,例如,我有TextConnection,MySQLConnection,&c ...作为类.
在另一个静态类中,我有一个字典,其中包含人类可读的名称作为键.对于每个字典条目的值,我想要类本身.那样的话,我可以这样做:
newConnection = new dict[connectionTypeString]();
Run Code Online (Sandbox Code Playgroud)
有没有办法做这样的事情?我对C#很新,所以我很感激任何帮助.
我假设你意识到.NET Framework已经有了一个IDbConnection接口和相应的实现者,它们已经完成了你似乎要做的大部分工作?
无论如何,您正在寻找的是工厂方法模式.工厂方法是一种方法,负责根据用户提供的类型参数(通常是枚举)创建特定接口的具体实例.
这里有一个C#示例,尽管有许多不同的方法来实现该模式.
工厂模式的另一种变化.只保留一个类型列表:
Dictionary<string, Type> pizzas = new Dictionary<string, Type>
{
{ "HamAndMushroomPizza", typeof(HamAndMushroomPizza) },
{ "DeluxePizza", typeof(DeluxePizza) },
{ "HawaiianPizza", typeof(HawaiianPizza) }
};
Run Code Online (Sandbox Code Playgroud)
然后创建具体实例:
string pizzaName = Console.ReadLine();
IPizza p = (IPizza)Activator.Create(pizzas[pizzaName]);
Console.WriteLine("{0}'s Price: {1}", pizzaName, p.Price);
Run Code Online (Sandbox Code Playgroud)
这种方法的吸引力在于,当您无法预先确定可以拥有多少披萨品种时,每次有新型披萨(想想在运行时加载DLL)时,您都无法承担重写披萨工厂(切换语句)的费用.
| 归档时间: |
|
| 查看次数: |
169 次 |
| 最近记录: |