Короче говоря, интерфейс используется для создания объекта, однако подкласс решает, какой класс создать. Создание объекта выполняется тогда, когда это требуется. Метод Factory позволяет позднее создавать классы для подклассов.
interface Product {}
class ConcreteProductA : Product {}
class ConcreteProductB : Product {}
abstract class Creator
{
public abstract Product FactoryMethod(string type);
}
class ConcreteCreator : Creator
{
public override Product FactoryMethod(string type)
{
switch (type)
{
case "A": return new ConcreteProductA();
case "B": return new ConcreteProductB();
default: throw new ArgumentException("Invalid type", "type");
}
}
}
Оригинал
В фабричном шаблоне нет ничего загадочного, на самом деле он один из самых простых и простых Дизайнерских шаблонов .
В самом простом случае вы берете несколько классов, связанных через интерфейс или базовый класс, и используете переключатель (или другое ветвление), чтобы решить, какой из них создать, а затем возвращаете его.
interface IMyLovelyHorse {...}
public class MyGreenHorse : IMyLovelyHorse {...}
public class MyYellowHorse : IMyLovelyHorse {...}
public class MyLittleHorse : IMyLovelyHorse {...}
...
public override IMyLovelyHorse CreateMyHorse(sometype somevalue)
{
switch(sometype)
{
case "MyGreenHorse" : return new MyGreenHorse();
...
}
}