Фабричный метод (Factory method)

Фабричный метод занимается созданием объектов. Каждый такой объект принадлежит некому классу, однако все эти классы либо имеют общего предка, либо реализуют общий интерфейс. Фабричный метод сам решает, какой конкретный класс нужно использовать для создания очередного объекта. Решение принимается либо на основе информации, предоставленной клиентом, либо на основе внутреннего состояния метода.

Рис. 11. Диаграмма шаблона Фабричный метод.

Для иллюстрации шаблона Фабричный метод представим магазин, торгующий определённым видом фруктов. Магазин (выступающий в роли клиента) работает с поставщиком (фабричный метод), который в зависимости от времени года импортирует фрукты (объекты) из разных стран (разные классы объектов). Детали операций импорта от клиента скрыты. Далее приведён код, использующий шаблон Фабричный метод и соответствующий описанному выше примеру.

public interface IProduct

{

string ShipFrom();

}

public class ProductFromAfrica: IProduct

{

public string ShipFrom()

{

return "from South Africa";

}

}

public class ProductFromSpain: IProduct

{

public string ShipFrom()

{

return "from Spain";

}

}

public class DefaultProduct: IProduct

{

public string ShipFrom()

{

return "not available";

}

}

public class Creator

{

public IProduct FactoryMethod(int month)

{

if (month >= 4 && month <= 11)

{

return new ProductFromAfrica();

}

if (month == 1 || month == 2 || month == 12)

{

return new ProductFromSpain();

}

return new DefaultProduct();

}

}

public class FactoryMethodExample

{

public static void Main()

{

var creator = new Creator();

IProduct product;

for (var i = 1; i <= 12; i++)

{

product = creator.FactoryMethod(i);

System.Console.WriteLine("Avocados " +

product.ShipFrom());

}

}

}


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: