C++ 设计模式 (一) 工厂模式

来源:互联网 发布:哈德斯菲尔德大学 知乎 编辑:程序博客网 时间:2024/04/29 08:19

  Factory模式的主要作用有两个:1.定义对象的创建借口,封装对象的创建过程;2.将对象的创建推迟到子类中去实现。

  在实际的开发过程中,我们往往创建的并不是基类本身而是其子类,但是子类的类名又不能提前知道,为了解决这个问题,只能将子类的创建推迟,Factory模式为这种问题的解决提供了一个很好的方案。同时,过多的不同子类的创建导致命名的苦难和程序结构的混乱,Factory模式为管理这些子类的创建提供了方便。

 

Factory 设计模式结构示意图

给出一个具体的例子

fruite.h(命名时多打了个e)

定义了3个类,Apple和Orange继承自Fruit,注意将Fruit的构造函数设置为protected访问权限,使其不能构造Fruit抽象对象,grow为virtual函数,方便检验,其实grow可以设置为纯虚函数的。

 

fruit.cpp

factory.h

在这里定义抽象基类Factory,OrangeFactory和AppleFactory,其中createFruit为虚函数,生成Fruit对象

 

 

factory.cpp

 

 

main.cpp

将实现的factory模式具体应用

 

 

上面的Factory2类等会在解释。我们可以看到为了生成Fruit子类我们创建了AppleFactory和OrangeFactory两个具体的工厂类,这样会导致类的增多,我们也可以在一个类中提供不同的创建接口来实现,但是问题是一样的会导致接口的增加和命名管理的复杂度。一个可行的方法是为createFruit接口提供不同的参数来创建不同的Fruit对象。我开始尝试用mfc中的宏来实现,但是发现看得懂是一回事,会做又是另一回事,只能改用其他方法来实现,该方法在添加新类的时候可能需要修改一下方法。

factory2.h

 

factory2.cpp

可以看到,通过对传入类名,对传入的字符串的判断来生成不同的Fruit对象,有新的子类时只需添加新的判定条件即可。