我的工厂方法模式的理解是(纠正我,如果我错了,)工厂方法模式澄清
工厂方法模式
“工厂方法允许客户端的代表产品创建(实例创建)到子类“。
有两种情况我们可以去创建工厂方法模式。
(i)当客户端被限制到产品(实例)创建。
(II)有多种产品available.But要做出一个决定返回哪些产品实例 需要。
如果你想创建抽象方法模式
- 你需要有抽象产品
- 混凝土制品
- 工厂方法返回相应的产品。
例子:
public enum ORMChoice
{
L2SQL,
EFM,
LS,
Sonic
}
//Abstract Product
public interface IProduct
{
void ProductTaken();
}
//Concrete Product
public class LinqtoSql : IProduct
{
public void ProductTaken()
{
Console.WriteLine("OR Mapping Taken:LinqtoSql");
}
}
//concrete product
public class Subsonic : IProduct
{
public void ProductTaken()
{
Console.WriteLine("OR Mapping Taken:Subsonic");
}
}
//concrete product
public class EntityFramework : IProduct
{
public void ProductTaken()
{
Console.WriteLine("OR Mapping Taken:EntityFramework");
}
}
//concrete product
public class LightSpeed : IProduct
{
public void ProductTaken()
{
Console.WriteLine("OR Mapping Taken :LightSpeed");
}
}
public class Creator
{
//Factory Method
public IProduct ReturnORTool(ORMChoice choice)
{
switch (choice)
{
case ORMChoice.EFM:return new EntityFramework();
break;
case ORMChoice.L2SQL:return new LinqtoSql();
break;
case ORMChoice.LS:return new LightSpeed();
break;
case ORMChoice.Sonic:return new Subsonic();
break;
default: return null;
}
}
}
**Client**
Button_Click()
{
Creator c = new Creator();
IProduct p = c.ReturnORTool(ORMChoice.L2SQL);
p.ProductTaken();
}
是我厂的方法的理解是正确的?
顺便说一句,使用'enum'这样有可能导致不必要的'之开关-ING。在这种情况下,我更喜欢为每个选择使用不同的功能。 – 2010-03-29 19:38:46