1 class IFactoryBase
2 {
3 public:
4 IFactoryBase(void);
5 virtual ~IFactoryBase(void);
6
7 public:
8 virtual IProductBase* CreateProduct() = 0;
9 };
10
11 class IProductBase
12 {
13 public:
14 IProductBase(void);
15 ~IProductBase(void);
16
17 public:
18 virtual void SetProductInfo() = 0;
19 };
20
21 class CFactoryA : public IFactoryBase
22 {
23 public:
24 CFactoryA(void);
25 ~CFactoryA(void);
26
27 public:
28 virtual IProductBase* CreateProduct();
29 };
30
31 IProductBase* CFactoryA::CreateProduct()
32 {
33 return new CProductA();
34 }
35
36 class CProductA : public IProductBase
37 {
38 public:
39 CProductA(void);
40 ~CProductA(void);
41
42 public:
43 void SetProductInfo(){}
44 };
45
46 class CFactoryB : public IFactoryBase
47 {
48 public:
49 CFactoryB(void);
50 ~CFactoryB(void);
51
52 public:
53 virtual IProductBase* CreateProduct();
54 };
55
56 IProductBase* CFactoryB::CreateProduct()
57 {
58 return new CProductB();
59 }
60
61 class CProductB : public IProductBase
62 {
63 public:
64 CProductB(void);
65 ~CProductB(void);
66
67 public:
68 virtual void SetProductInfo(){}
69 };
70
71 int _tmain(int argc, _TCHAR* argv[])
72 {
73 IFactoryBase *pFactory = new CFactoryA();
74 if (NULL != pFactory)
75 {
76 IProductBase *pProductBase = pFactory->CreateProduct();
77 if (NULL != pProductBase)
78 {
79 pProductBase->SetProductInfo();
80 }
81
82 delete pProductBase;
83 }
84
85 delete pFactory;
86
87 return 0;
88 }
核心思想:将工厂抽象出来,将产品抽象出来,子工厂负责new 子产品指针,返回抽象产品类指针,外面调用时只需要生成基类工厂指针,调用创建产品函数,就可以对该产品进行具体的操作,优点是能够将添加产品完全独立出来不再修改内部代码。
与简单工厂比较:修正了简单工厂模式中不遵循开放---封闭原则,例如添加新产品时仍需要修改工厂基类内容,工厂方法模式将判断移动到客户端实现。
部分代码:
原文链接: https://www.cnblogs.com/fenglangxiaotian/p/5671153.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/237002
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!