Factory Method(工厂方法)
1. Factory Method(工厂方法)
1.1 定义
工厂方法模式(Factory Method Pattern)又叫虚拟构造函数(Virtual Constructor)模式或者多态性工厂(PolymorphicFactory)模式。工厂方法模式的用意是定义一个创建产品对象的工厂接口,将实际创建性工作推迟到子类中,即定义一个用于创建对象的接口,让子类决定实例化哪个类。工厂方法使一个类的实例化延迟到其子类。
1.2 缺点
当产品种类过多,由于每一种产品都需要实现一个工厂类,增加了代码量
1.3 c++源码例程
1 #include<iostream> 2 using namespace std; 3 4 //定义产品类型 5 typedef enum{ 6 Product_Type_01, 7 Product_Type_02 8 }Product_Type; 9 10 //定义抽象产品类 11 class Product{ 12 public: 13 virtual string getType() = 0; 14 }; 15 16 //具体产品类01 17 class Product01:public Product{ 18 public: 19 Product01():Product(),m_type("Product01"){ 20 21 } 22 string getType(){ 23 cout << m_type << endl; 24 return m_type; 25 } 26 private: 27 string m_type; 28 }; 29 30 //具体产品类02 31 class Product02:public Product{ 32 public: 33 Product02():Product(),m_type("Product02"){ 34 35 } 36 string getType(){ 37 cout << m_type << endl; 38 return m_type; 39 } 40 private: 41 string m_type; 42 }; 43 44 //抽象工厂类 45 class ProductFactory 46 { 47 public: 48 virtual Product* createProduct() = 0; 49 }; 50 51 //具体创建工厂类 52 class Product01Factory 53 { 54 public: 55 virtual Product* createProduct(){ 56 return new Product01(); 57 } 58 }; 59 60 //具体创建工厂类 61 class Product02Factory 62 { 63 public: 64 virtual Product* createProduct(){ 65 return new Product02(); 66 } 67 }; 68 int main(){ 69 Product01Factory* factory01 = new Product01Factory(); 70 Product* product01 = factory01->createProduct(); 71 product01->getType(); 72 73 Product02Factory* factory02 = new Product02Factory(); 74 Product* product02 = factory02->createProduct(); 75 product02->getType(); 76 77 delete product01; 78 product01 = NULL; 79 delete factory01; 80 factory01 = NULL; 81 delete product02; 82 product02 = NULL; 83 delete factory02; 84 factory02 = NULL; 85 }
我心自有明月在,不堕地狱不跪佛

浙公网安备 33010602011771号