设计模式(c++)笔记之一(Factory Method工厂方法模式)
发布网友
发布时间:2024-10-21 19:52
我来回答
共1个回答
热心网友
时间:2024-10-29 23:17
工厂方法模式的意义在于定义一个创建产品对象的工厂接口,并推迟实际创建工作至子类中。核心工厂类不再负责产品的创建,转而成为抽象工厂角色,仅负责具体工厂子类必须实现的接口。这种抽象化的好处是使得系统在不修改具体工厂角色的情况下,可以引进新的产品。
通常使用Factory模式来解决问题。在第一个问题中,我们经常声明一个创建对象的接口,并封装对象的创建过程。Factory在此类似于一个真正意义上的工厂。在第二个问题中,我们需要提供一个对象创建对象的接口,并在子类中提供具体实现,因为只有在子类中才能决定实例化哪一个类。
第一种情况的Factory结构示意图为图1。所以的Factory模式经常在系统开发中使用,但这并非Factory模式的最大威力所在。Factory模式不仅提供了创建对象的接口,更重要的是延迟了子类的实例化。以下是这种情况的一个Factory结构示意图:图2。Factory模式的应用并非只是为了封装对象的创建,而是要把对象的创建放到子类中实现:Factory中只是提供了对象创建的接口,其实现将放在Factory的子类ConcreteFactory中进行。这是图2和图1的区别所在。
实例描述:女娲补天的故事大家都听说过吧,今天不说这个,说女娲创造人的故事。女娲在补了天后,下到凡间一看,哇塞,风景太优美了,天空是湛蓝的,水是清澈的,空气是清新的,太美丽了,然后就待时间长了就有点寂寞了,没有动物,这些看的到都是静态的东西呀,怎么办?别忘了是神仙呀,没有办不到的事情,于是女娲就架起了八卦炉(技术术语:建立工厂)开始创建人,具体过程是这样的:先是泥巴捏,然后放八卦炉里烤,再扔到地上成长,但是意外总是会产生的:第一次烤泥人,兹兹兹兹~~,感觉应该熟了,往地上一扔,biu~,一个白人诞生了,没烤熟!第二次烤泥人,兹兹兹兹兹兹兹兹~~,上次都没烤熟,这次多烤会儿,往地上一扔,嘿,熟过头了,黑人哪!第三次烤泥人,兹~兹~兹~,一边烤一边看着,嘿,正正好,Perfect!优品,*人类!这个过程还是比较有意思的,先看看类图:
我的工程目录:
注释:main(),女娲 IHuman,产品接口 CYellowHuman,产品之一 CWhiteHuman,产品之二 CBlackHuman,产品之三 IHumanFactory,工厂接口 CYellowHumanFactory,工厂之一 CWhiteHumanFactory,工厂之二 CBlackHumanFactory,工厂之三
产品接口类IHuman IHuman.h
黄种人类YellowHuman YellowHuman.h
YellowHuman.cpp
白种人类WhiteHuman WhiteHuman.h
WhiteHuman.cpp
黑种人BlackHuman BlackHuman.h
BlackHuman.cpp
工厂接口IHumanFactory IHumanFactory.h
创造黄种人工厂类YellowHumanFactory YellowHumanFactory.h
YellowHumanFactory.cpp
创造白种人工厂类WhiteHumanFactory.h WhiteHumanFactory.h
WhiteHumanFactory.cpp
创造黑种人工厂类BlackHumanFactory BlackHumanFactory.h
BlackHumanFactory.cpp
主类main.cpp
结果如下:
参考文献:《设计模式之禅》,《GoF_23种设计模式解析》