简单工厂模式,又称为静态工厂方法模式,属于创建型模式,但不是 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
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!