抽象工厂模式_第1页
抽象工厂模式_第2页
抽象工厂模式_第3页
抽象工厂模式_第4页
抽象工厂模式_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、题目:抽抽象工厂厂模式学生姓名名 张 婧学 号 201102110777 院 系信信息科学学与技术术学院专 业 计算机机应用技技术 年 级 20110 级级抽象工厂厂模式在软件系系统中,经常面面临着“一系列列相互依依赖的对对象”的创建建工作;同时由由于需求求的变化化,往往往存在着着更多系系列对象象的创建建工作。如何应应对这种种变化?如何绕绕过常规规的对象象的创建建方法(neww),提提供一种种“封装机机制”来避免免客户程程序和这这种“多系列列具体对对象创建建工作”的紧耦耦合?这这就要用用到抽象象工厂模模式。抽抽象工厂厂模式是简简单工厂厂模式和工工厂方法法模式的升升级版,它有更更大的灵灵活性,同

2、时也也更加复复杂一些些。为了理解解抽象工工厂,我我们考虑虑这样一一个实际际例子:如果你你想吃饭饭了,怎怎么办自自己做吗吗?自己己做就相相当于程程序中直直接使用用neww。当然然是自己己下个指指令,别别人来做做更爽。那就把把做饭的的任务交交给厨师师吧,那那么他就是一一个做饭饭的工厂厂了,你你告诉他他要吃红红烧肉,等会他他就从厨厨房给你你端出来来一盘香香喷喷的的红烧肉肉了,再再来个清清蒸鱼吧吧。下图图 1 就是这这个问题题的模型型。图11 显然然到了这这里,你你是Clliennt,厨厨师就是是工厂,他拥有做做红烧肉肉的方法法,做清清蒸鱼的的方法,这些方方法返回回值就是是食物抽抽象。红红烧肉、清蒸鱼

3、鱼就是食食物的继继承类,简单工工厂模式式也成型型了。简单工厂厂模式结结构图2优点:允允许客户户端相对对独立的的创建产产品的过过程,并并且在系系统引入入新产品品的时候候无需修修改客户户端。缺点:对对修改不不封闭,新增加加产品您您要修改改工厂。违法了了开闭法法则(OOCP)。工厂厂方法模模式生活活例子: 厨师手艺艺再好,总有不不会做的的菜,你你想吃回回锅肉,怎么办办,让厨厨师学呗呗,于是是就给他他新增了了做回锅锅肉的方方法,以以后你再再想吃一一个新菜菜,就要要给厨师师新加一一个方法法,显然然此做法法的缺点点也就暴暴露出来来了,用用程序设设计的描描述就是是对修改改永远不不能封闭闭。 面面对上面面对修

4、改改不能封封闭的问问题,有有没有好好的解决决方案吗吗?把厨师抽象象变成一一个基类类,你请请几个具具体的厨厨师,分分别有做做清蒸鱼鱼的,做做红烧肉肉的厨师,如如果你想想吃一个个新菜,就再新新找个厨厨师,从从你的厨厨师基类类继承一一下,让让他来做这这个新菜菜。现在在来看这这个模式式发生了了变化,结构中中多了一一个厨师师的抽象象,抽象象并不具具体的加加工产品品了,至至于做什什么,是是由这个个抽象工工厂的继继承子类类来实现现,现在在的模式式也就变变成工厂厂方法模模式了,这个上上面的结结构图11就变成成了下面面的图33的结构构了。图图3 现现在再来来分析现现在的模模式,显显然简单单工厂的的缺陷解解决了,

5、新增加加一个菜菜只需要要新增加加一个厨厨师就行行了,原原来的厨厨师还在在做原来来的工作作,这样样你的设设计就对对修改封封闭了。工厂方法法模式结结构 图图4优点:优优化简单单工厂模模式,做做到“开-闭闭”原则。可做到到把具体体的产品品创建过过程延迟迟到具体体的子类类工厂。缺点:对对于创建建不同系系列的产产品无能能为力。抽象工厂厂模式生生活例子子 你发现菜菜可分成许多菜菜系,鲁鲁菜、粤粤菜、湘湘菜等等等,它们们各有各各的风味味,同样样是红烧烧肉由不不同菜系系出来的的味道也也各不相相同。如如果你的的厨师都都是鲁菜菜风味,广东的的朋友来来了吃不不惯,怎怎么办?现在我们们再回到到简单工工厂模式式,我们们

6、把红烧烧肉再向向下继承承,生成成鲁菜红红烧肉、粤菜红红烧肉、湘菜红红烧肉;清蒸鱼鱼向下继继承为鲁鲁菜清蒸蒸鱼、粤粤菜清蒸蒸鱼、湘湘菜清蒸蒸鱼。我我们也修修改一下下厨师这个个类,不不让其返返回食物物基类,而是返返回红烧烧肉、清清蒸鱼、这一层层次,并并把这些些方法抽抽象化,作为菜菜系工厂厂基类,然后再再从此基基类继承承出,鲁鲁菜工厂厂、粤菜菜工厂、湘菜工工厂等等等,再由由这些具具体工厂厂实现创创建具体体菜的工工作。 图图5 现在在可以看看到,想想新来做做一个菜菜系,只只需新聘聘请一个个厨师就就可以了了,多么么完美,但是你你先别高高兴太早早,如果果你想新新增加一一个菜就就变得非非常困难难了。抽象工厂

7、厂模式结结构图6抽象工厂厂模式代代码#inccludde #inccludde usinng nnameespaace stdd;/红烧烧肉classs CCHonngshhaorroupubllic: virrtuaal CHoongsshaoorouu() ; /产产品使用用公共接接口 virrtuaal vvoidd Sttartt() = 00;/抽象基基类,纯纯虚函数数由派生生类去实实现; /鲁鲁菜红烧烧肉classs CCHonngshhaorrouLLucaai : puubliic CCHonngshhaorroupubllic: CHoongsshaoorouuLuccai(

8、) coout 制作作鲁菜红红烧肉. eendll; virrtuaal CHoongsshaoorouuLuccai() ; virrtuaal vvoidd Sttartt() coout 鲁菜菜红烧肉肉好了. eendll; ;/粤菜菜红烧肉肉classs CCHonngshhaorrouYYueccai : ppubllic CHoongsshaoorouupubllic: CHoongsshaoorouuYueecaii() coout 制作作粤菜红红烧肉. eendll; virrtuaal CHoongsshaoorouuYueecaii() ; virrtuaal vvoidd

9、 Sttartt() coout 粤菜菜红烧肉肉好了. eendll; ; /清清蒸鱼classs CCqinngzhhenggyupubllic: virrtuaal Cqiingzzhenngyuu() ; /产产品使用用公共接接口 virrtuaal vvoidd Sttartt() = 00;/抽象基基类,纯纯虚函数数由派生生类去实实现; /鲁鲁菜清蒸蒸鱼classs CCqinngzhhenggyuLLucaai : puubliic CCqinngzhhenggyupubllic: CqiingzzhenngyuuLuccai() coout 制作作鲁菜清清蒸鱼. eendll;

10、virrtuaal CqiingzzhenngyuuLuccai() ; virrtuaal vvoidd Sttartt() coout 鲁菜菜清蒸鱼鱼好了. eendll; ; /粤粤菜清蒸蒸鱼classs CCqinngzhhenggyuYYueccai : ppubllic Cqiingzzhenngyuupubllic: CqiingzzhenngyuuYueecaii() coout 制作作粤菜清清蒸鱼. eendll; virrtuaal CqiingzzhenngyuuYueecaii() ; virrtuaal vvoidd Sttartt() coout 粤菜菜清蒸鱼鱼好了

11、. eendll; ;/抽象象工厂classs CCFacctorrypubllic: virrtuaal CFaactoory(); virrtuaal CCHonngshhaorrou* CrreatteHoongsshaoorouu() = 00; virrtuaal CCqinngzhhenggyu* Crreatteqiingzzhenngyuu() = 00;/鲁菜菜工厂classs CCLuccaiFFacttoryy : pubblicc CFFacttoryypubllic: CLuucaiiFacctorry() coout 制作作鲁菜工工厂. enndl; virrtua

12、al CLuucaiiFacctorry(); virrtuaal CCHonngshhaorrou* CrreatteHoongsshaoorouu() reeturrn nnew CHoongsshaoorouuLuccai; ; virrtuaal CCqinngzhhenggyu* Crreatteqiingzzhenngyuu() reeturrn nnew CqiingzzhenngyuuLuccai;/粤菜菜工厂classs CCYueecaiiFacctorry : puubliic CCFacctorrypubllic: CYuuecaaiFaactoory() coout

13、制作作粤菜工工厂. CrreatteHoongsshaoorouu();/制制作红烧烧肉 pqiingzzhenngyuu = pFaactoory-Crreatteqiingzzhenngyuu();/制制作清蒸蒸鱼 pHoongsshaoorouu-SStarrt(); pqiingzzhenngyuu-SStarrt(); delletee pqqinggzheengyyu; delletee pHHonggshaaoroou;int maiin() CFaactoory* pFFacttoryy = NULLL;/抽象象工厂 /鲁鲁菜工厂厂。做红红烧肉,清蒸鱼鱼 pFaactoory

14、= nnew CLuucaiiFacctorry;/制作作鲁菜工工厂 Tesst(ppFacctorry); delletee pFFacttoryy; couutenddl; /粤粤菜工厂厂。做红红烧肉,清蒸鱼鱼 pFaactoory= neew CCYueecaiiFacctorry;/制作作粤菜工工厂 Tesst(ppFacctorry); delletee pFFacttoryy; sysstemm(ppausse); retturnn 0;优点:将将客户端端与具体体的类分分离。一一个产品品系列中中的多个个对象被被设计在在一起工工作,能能保证客客户端始始终只使使用一个个产品系系列,且且有利于于更新产产品系列列。缺点:难难以支持持新品种种产品。抽象工厂厂模式与与工厂方方法模式式的区别别 a重点点不同。工厂方方法模式式强调的的是不同同的创建建者根据据自身需需求去生生产不同同的具体体产品,重点是是生产具具体产品品;而抽抽象工厂厂模式则则定位为为“在不指指定实体体类别的的前提下下,提供供了一个个可以创创建一系系列相关关或互相相依赖之之组件的的接口”,重点

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论