简单工厂模式

简单工厂模式,又称为静态工厂方法模式,属于创建型模式,但不是 GOF 的23种模式之一,它由一个工厂对象决定创建出哪一种产品类的实例。其实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例,然后统一返回该实例的基类指针,以供程序其它地方统一调用。

1 #include <iostream>
 2 
 3 class Base
 4 {
 5     public:
 6         virtual void show() = 0;
 7 };
 8 
 9 class Children1 : public Base
10 {
11     public:
12         void show()
13         {
14             std::cout<<"Children1"<<std::endl;
15         }
16 };
17 
18 class Children2 : public Base
19 {
20     public:
21         void show()
22         {
23             std::cout<<"Children2"<<std::endl;
24         }
25 };
26 
27 typedef enum _Enum
28 {
29     ONE = 1,
30     TWO = 2,
31 } MyEnum;
32 
33 #define CASE(num,classname) case num:obj=new classname();break;
34 class Factory
35 {
36     public:
37         static Base* createObj(MyEnum num)
38         {
39             Base* obj = nullptr;
40             switch(num)
41             {
42                 CASE(ONE,Children1)
43                 CASE(TWO,Children2)
44 
45                 default:
46                     break;
47             }
48             return obj;
49         }
50 };
51 
52 int main()
53 {
54     Factory::createObj(ONE)->show();
55     Factory::createObj(TWO)->show();
56 }

缺点:没有相应的delete操作,需要在使用时,将创建出来的对象赋给一个基类指针,使用完后delete该指针。上面的代码就存在内存泄漏问题。

Makeflie:

1 CXX = g++
 2 CXXFLAGS = -g -gdwarf-2 -Wall -O0 -std=c++0x 
 3 
 4 VPATH =.
 5 SRC_FILES = $(foreach n, $(VPATH),$(wildcard $(n)/*.cpp))
 6 EXE_FILES = $(basename $(notdir $(SRC_FILES)))
 7 
 8 .PHONY:target
 9 target : $(EXE_FILES)
10 
11 % : %.cpp
12     $(CXX) $(CXXFLAGS) -o $@ $<
13 
14 .PHONY:clean
15 clean:
16     -rm -rf $(EXE_FILES)

原文链接: https://www.cnblogs.com/tianyajuanke/archive/2013/04/12/3016798.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/84285

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 下午9:29
下一篇 2023年2月9日 下午9:30

相关推荐