定义:定义一个用于创建对象的接口,让子类来决定实例化哪个类。
对于工厂方法模式的组成:
1)抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。
2)具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。
3)抽象产品角色:它是具体产品继承的父类或者是实现的接口。
4)具体产品角色:具体工厂角色所创建的对象就是此角色的实例。
using namespace std; class abstractProduct { public: virtual ~abstractProduct() {}; virtual void show() = 0; }; class Product1 :public abstractProduct { public: void show() { cout << "正在生产一号产品" << endl; } }; class Product2 :public abstractProduct { public: void show() { cout << "正在生产二号产品" << endl; } }; class Product3 :public abstractProduct { public: void show() { cout << "正在生产三号产品" << endl; } }; class abstractFactory { public: //纯虚函数,工厂创建产品线,联系工厂与产品的纽带 virtual abstractProduct * creatProduct() = 0; }; class Factory1 :public abstractFactory { public: abstractProduct * creatProduct() { printf("一号工厂"); return new Product1(); } }; class Factory2 :public abstractFactory { public: abstractProduct * creatProduct() { printf("二号工厂"); return new Product2(); } }; class Factory3 :public abstractFactory { public: abstractProduct * creatProduct() { printf("三号工厂"); return new Product3(); } }; int main() { //创建一号工厂 Factory1 factory1; abstractProduct* pProduct1 = factory1.creatProduct(); pProduct1->show(); //创建二号工厂 Factory2 factory2; abstractProduct* pProduct2 = factory2.creatProduct(); pProduct2->show(); //创建三号工厂 Factory3 factory3; abstractProduct* pProduct3 = factory3.creatProduct(); pProduct3->show(); delete pProduct1; delete pProduct2; delete pProduct3; return 0; }