阅读量:0
在C++中,Functor是一个类或结构体,它重载了函数调用运算符operator()。通过重载operator(),我们可以将Functor对象当作函数来调用,从而实现类似函数指针的功能。
在工厂模式中,我们可以使用Functor来实现工厂方法模式。工厂方法模式是一种创建型设计模式,它定义一个接口用于创建对象,但是由子类决定实例化哪一个类。在C++中,我们可以使用Functor作为工厂方法,根据不同的条件返回不同的对象实例。
下面是一个简单的示例,演示了如何使用Functor实现工厂方法模式:
#include <iostream> // 抽象产品类 class Product { public: virtual void use() = 0; }; // 具体产品类A class ProductA : public Product { public: void use() { std::cout << "Product A used" << std::endl; } }; // 具体产品类B class ProductB : public Product { public: void use() { std::cout << "Product B used" << std::endl; } }; // 抽象工厂类 class Factory { public: virtual Product* createProduct() = 0; }; // 具体工厂类A class FactoryA : public Factory { public: Product* createProduct() { return new ProductA(); } }; // 具体工厂类B class FactoryB : public Factory { public: Product* createProduct() { return new ProductB(); } }; // Functor作为工厂方法 class FactoryFunctor { public: Product* operator() (int type) { if (type == 1) { return new ProductA(); } else { return new ProductB(); } } }; int main() { // 使用具体工厂类A创建产品 Factory* factoryA = new FactoryA(); Product* productA = factoryA->createProduct(); productA->use(); // 使用Functor作为工厂方法创建产品 FactoryFunctor factoryFunctor; Product* productB = factoryFunctor(2); productB->use(); return 0; }
在上面的示例中,我们定义了抽象产品类Product和两个具体产品类ProductA和ProductB,以及抽象工厂类Factory和两个具体工厂类FactoryA和FactoryB。然后我们定义了一个FactoryFunctor类,它重载了()运算符,根据传入的参数选择实例化哪个产品类。
通过使用Functor作为工厂方法,我们可以根据不同的条件选择不同的产品类,实现灵活的工厂模式。