Фабричный метод - это основание для работы абстрактной фабрики и строителя. Предположим, наша игра должна производить территорию.
class CGame { public: virtual CTerrain* createTerrain(); //.... } class CTerrain { //.... }
Оба класса абстрактные, потому что игра может вестись за людей или гномов, и соответственно территории могут быть людские или гномьи, а просто игры и территории не бывает. Игра должна породить территорию в зависимости от того, кто она (игра) на самом деле.
class CHumanTerrain : public CTerrain { //.... } class CHumanGame : public CGame { CTerrain* createTerrain () { return new CHumanTerrain; }; }
Производящий метод createTerrain и есть фабричный метод. Структура паттерна такова: класс CCreator желает получать
CProduct, но предоставляет своим конкретным потомкам право решать, какой конкретный продукт производить.