简单工厂模式,又称静态工厂模式,简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。
简单工厂模式是工厂模式家族中最简单实用的模式。
简单工厂模式的实质是由一个工厂类根据传入的参数,
动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。
工厂是简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。
工厂类的创建产品类的方法可以被外界直接调用,创建所需的产品对象。
适用场景:简单工厂在你的工厂处理类型明确,不会变动的非常频繁,
而又会有变动的可能性的时候使用,因为简单工厂还是需要对代码进行修改。
实例的UML图如下:
ProductA、ProductB和ProductC继承自Product虚拟类,Show方法是不同产品的自描述;Factory依赖于ProductA、
ProductB和ProductC,Factory根据不同的条件创建不同的Product对象。
程序如下:
1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 5 typedef enum ProductTypeTag { 6 TypeA, 7 TypeB, 8 TypeC 9 }PRODUCTTYPE; 10 11 class Product { 12 public: 13 virtual void Show() = 0; 14 }; 15 16 class ProductA : public Product { 17 public: 18 void Show() { 19 cout << "I'm ProductA" << endl; 20 } 21 }; 22 23 class ProductB : public Product { 24 public: 25 void Show() { 26 cout << "I'm ProductB" << endl; 27 } 28 }; 29 30 class ProductC : public Product { 31 public: 32 void Show() { 33 cout << "I'm ProductC" << endl; 34 } 35 }; 36 37 38 class Factory { 39 public: 40 Product* CreateProduct(PRODUCTTYPE type) { 41 switch (type) { 42 case TypeA: 43 return new ProductA(); 44 45 case TypeB: 46 return new ProductB(); 47 48 case TypeC: 49 return new ProductC(); 50 51 default: 52 return NULL; 53 } 54 } 55 }; 56 57 int main() { 58 Factory *ProductFactory = new Factory(); 59 Product *productObjA = ProductFactory->CreateProduct(TypeA); 60 if (productObjA != NULL) { 61 productObjA->Show(); 62 } 63 64 Product *productObjB = ProductFactory->CreateProduct(TypeB); 65 if (productObjB != NULL) { 66 productObjB->Show(); 67 } 68 69 Product *productObjC = ProductFactory->CreateProduct(TypeC); 70 if (productObjC != NULL) { 71 productObjC->Show(); 72 } 73 74 delete ProductFactory; 75 ProductFactory = NULL; 76 77 delete productObjA; 78 productObjA = NULL; 79 80 delete productObjB; 81 productObjB = NULL; 82 83 delete productObjC; 84 productObjC = NULL; 85 86 return 0; 87 }
参考链接:http://www.jellythink.com/archives/42
欢迎关注公众号Magicio