printПорождающие паттерны

printФабричный метод

Factory Method

Назначение
Определяет интерфейс для создания объекта, но оставляет подклассам решение о том, какой класс инстанцировать.

Результаты
1. Фабричные методы избавляют проектировщика от необходимости встраивать в код зависящие от приложения классы. Код имеет дело только с интерфейсом класса Product, поэтому он может работать с любыми классами конкретных продуктов.
2. Паттерн может использоваться для соединения параллельных иерархий, например, основных и вспомогательных продуктов типа итераторов. С помощью фабричного метода локализуется знание о том, какие классы должны работать совместно.

Реализация
// Продукт определяет интерфейс объектов, создаваемых фабричным методом
class Product {};
// Создатель объявляет фабричный метод, возвращающий объект типа Product 
// и может вызывать этот метод для создания объектов
class Creator {
public:
  virtual Product *CreateProduct()=0;
  void Operation() {
    Product *product=CreateProduct();
    ...
  }
};
// Конкретный продукт
class Product1 : public Product {};
// Конкретный создатель замещает фабричный метод
class Creator1 : public Creator {
public:
  Product1 *CreateProduct() { return new Product1(); }
};
loading