简单工厂模式,又称静态工厂模式,简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。
简单工厂模式是工厂模式家族中最简单实用的模式。

简单工厂模式的实质是由一个工厂类根据传入的参数,
动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。
工厂是简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。
工厂类的创建产品类的方法可以被外界直接调用,创建所需的产品对象。


适用场景:简单工厂在你的工厂处理类型明确,不会变动的非常频繁,
而又会有变动的可能性的时候使用,因为简单工厂还是需要对代码进行修改。

 

实例的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

 

posted on 2016-04-12 09:45  LyndonYoung  阅读(200)  评论(0编辑  收藏  举报