Мое понимание шаблона фабричного метода: ( Исправьте меня, если я ошибаюсь )
Шаблон фабричного метода
«Фабричный метод позволяет клиенту делегировать создание продукта (создание экземпляра) подклассу».
Есть две ситуации, в которых мы можем перейти к созданию шаблона Factory Method.
(i) Когда клиент ограничен созданием продукта (экземпляра).
(ii) Доступно несколько продуктов. Но решение о том, какой экземпляр продукта должен быть сделан
необходимо вернуть.
Если вы хотите создать шаблон Abstract Method
- Вам нужно иметь абстрактный продукт
- Бетонный продукт
- Заводской метод возврата соответствующего товара.
Пример:
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();
}
Правильно ли я понимаю Фабричный метод?