码迷,mamicode.com
首页 > 编程语言 > 详细

C++设计模式---工厂模式

时间:2017-03-10 00:15:52      阅读:247      评论:0      收藏:0      [点我收藏+]

标签:log   模式   不同   creat   factor   构建   创建   --   简单工厂   

最近工作原因,需要使用工厂模式生成Log产生机制,因此简单学习并总结了工厂模式。

工厂模式分三类:简单工厂模式、工厂方法模式和抽象工厂模式

简单工厂模式:主要特点是需要在工厂类中做判断,从而创造相应的产品。当增加新的产品时,就需要修改工厂类。举例说明:A公司有一个工厂能够生产Class1和Class2两种不同的商品。商人B希望A公司生产某种商品只需向A公司说明需要生产那个商品即可。

示例代码:

 1 enum CTYPE{COREA,COREB};
 2 
 3 class SingleCore
 4 {
 5 public:
 6     virtual void show() = 0;
 7 };
 8 
 9 class SingleCoreA:public SingleCore
10 {
11 public:
12     void show(){ cout << "SingleCore A" << endl; }
13 };
14 
15 class SingleCoreB:public SingleCore
16 {
17 public:
18     void show(){ cout << "SingleCore B" << endl; }
19 };
20 
21 class Factory
22 {
23 public:
24     SingleCore* CreateSingleCore(enum CTYPE ctype)
25     {
26         if (COREA==ctype)
27             return new SingleCoreA();
28         else if (COREB==ctype)
29             return new SingleCoreB();
30         else
31             return nullptr;
32     }
33 };
34 
35 int main()
36 {
37     Factory factoryTemp;
38     SingleCore* core =     factoryTemp.CreateSingleCore(COREA);
39     core->show();
40     core = factoryTemp.CreateSingleCore(COREB);
41     core->show();
42     system("pause");
43     return 0;
44 
45 }
简单工厂模式的弊端是若向增加一种类型(比如B希望A生产Class3商品),则必须修改Factory类,不满足开放封闭原则。

工厂方法模式:是指定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类;简单理解就是A公司开了两间工厂Factory1和Factory2分别生产商品1和商品2,商人B只需到对应工厂即可,而不需告诉A需要生产什么商品。
示例代码:
 1 class SingleCore
 2 {
 3 public:
 4     virtual void Show() = 0;
 5 };
 6 //单核A    
 7 class SingleCoreA : public SingleCore
 8 {
 9 public:
10     void Show() { cout << "SingleCore A" << endl; }
11 };
12 //单核B    
13 class SingleCoreB : public SingleCore
14 {
15 public:
16     void Show() { cout << "SingleCore B" << endl; }
17 };
18 class Factory
19 {
20 public:
21     virtual SingleCore* CreateSingleCore() = 0;
22 };
23 //生产A核的工厂    
24 class FactoryA : public Factory
25 {
26 public:
27     SingleCoreA* CreateSingleCore() { return new SingleCoreA(); }
28 };
29 //生产B核的工厂    
30 class FactoryB : public Factory
31 {
32 public:
33     SingleCoreB* CreateSingleCore() { return new SingleCoreB(); }
34 };
35 
36 int main()
37 {
38     FactoryA factoryA;              ///构建A工厂类
39     SingleCore* core = factoryA.CreateSingleCore();
40     core->Show();
41     FactoryB factoryB;
42     core = factoryB.CreateSingleCore();
43     core->Show();
44     system("pause");
45     return 0;
46 
47 }

工厂方法模式的缺点是需要为每个商品子类建立一个工厂子类

抽象工厂模式:为创建一组相关或者依赖的对象提供一个接口,且无需指定他们的具体类

 

C++设计模式---工厂模式

标签:log   模式   不同   creat   factor   构建   创建   --   简单工厂   

原文地址:http://www.cnblogs.com/barbielxt/p/6528436.html

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