码迷,mamicode.com
首页 > 其他好文 > 详细

1 创建型模式-----简单工厂模式

时间:2015-05-23 19:59:31      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:

1.1 模式定义

简单工厂模式:将创建不同对象的代码封装到具体产品类中;

将创建这些具体产品类的公共代码封装到到抽象产品类中;

定义一个工厂类,该类的静态方法可以根据不同参数创建不同的具体产品实例。

模式要点:需要什么类型的产品,只需传入一个正确的参数,就可以获得一个对应的实例。

1.2 模式结构图

技术分享

1.3 模式角色

抽象产品Product: 具体产品类的父类,封装了各种具体产品的公共方法。

具体产品ConcreteProduct: 需要实例化的类。

工厂类Factory: 简单工厂模式的核心,负责创建所有具体产品的实例。

1.4 代码实现

 1 bt_简单工厂模式.h
 2 #ifndef SFP_H
 3 #define SFP_H
 4 #include <string.h>
 5 #include <iostream>
 6 
 7 using namespace std;
 8 
 9 /* 定义抽象产品类 */
10 class Product
11 {
12 public:
13     virtual ~Product(){}
14     void sharedMethod()
15     {
16         cout << "执行具体产品类的公共代码" << endl;
17     }
18 };
19 
20 /* 定义具体产品类 */
21 class ConcreteProductA : public Product
22 {
23 public:
24     ConcreteProductA()
25     {
26         this->sharedMethod();
27         cout << "创建具体产品A" << endl;
28     }
29     ~ConcreteProductA()
30     {
31         cout << "销毁具体产品A" << endl;
32     }
33 
34 };
35 class ConcreteProductB : public Product
36 {
37 public:
38     ConcreteProductB()
39     {
40         this->sharedMethod();
41         cout << "创建具体产品B" << endl;
42     }
43     ~ConcreteProductB()
44     {
45         cout << "销毁具体产品B" << endl;
46     }
47 };
48 
49 /* 定义工厂类 */
50 class Factory
51 {
52 public:
53     static Product* createProduct(const char* args)
54     {
55         if(strcmp(args, "A") == 0)
56         {
57             return new ConcreteProductA();
58         }
59         if(strcmp(args, "B") == 0)
60         {
61             return new ConcreteProductB();
62         }
63         else
64         {
65             cout << "unknown product type" << endl;
66             return NULL;
67         }
68     }
69 };
70 #endif // SFP_H
71 
72 
73 
74 bt_简单工厂模式.cpp
75 #include "bt_简单工厂模式.h"
76 #include <iostream>
77 
78 using namespace std;
79 
80 int main()
81 {
82     cout << "*****简单工厂模式测试用例*****" << endl;
83     Product* product = NULL;
84     product = Factory::createProduct("A");
85 
86     delete product;
87 
88     return 0;
89 }

1.5 简单工厂模式的简化

在某些情况下,可以将抽象产品类和工厂类合并,将静态工厂方法放在抽象产品类中,如下图所示:

技术分享 

1.6 模式总结

简单工厂模式提供了用于创建对象的工厂类,将对象的创建和使用分量开来,其特点如下:

优点:

分离对象的创建和使用;用户只需通过具体产品对应的参数即可创建实例对象。

缺点:

工厂类职责过重;系统扩展困难,增加新产品必须修改工厂逻辑。

适用场景:

具体产品类比较少且稳定的情况。

 

                                                      

                                                       参考自刘伟博客: http://blog.csdn.net/lovelion

1 创建型模式-----简单工厂模式

标签:

原文地址:http://www.cnblogs.com/benxintuzi/p/4524772.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!