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

下载本文档

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

文档简介

1、 HYPERLINK ./ 更多资料请访问. HYPERLINK (.) (.)更多企业学学院: HYPERLINK ./Shop/ ./SShopp/中小企业业管理全全能版183套讲讲座+8897000份资料 HYPERLINK ./Shop/40.shtml ./Shhop/40.shttml总经理、高高层管理理49套讲座座+1663888份资料 HYPERLINK ./Shop/38.shtml ./Shhop/38.shttml中层管理理学院46套讲座座+60020份份资料 HYPERLINK ./Shop/39.shtml ./Shhop/39.shttml国学智慧慧、易经经46套讲

2、座座 HYPERLINK ./Shop/41.shtml ./Shhop/41.shttml人力资源源学院56套讲座座+2771233份资料 HYPERLINK ./Shop/44.shtml ./Shhop/44.shttml各阶段员员工培训训学院77套讲座座+ 3324份份资料 HYPERLINK ./Shop/49.shtml ./Shhop/49.shttml员工管理理企业学学院67套讲座座+ 887200份资料 HYPERLINK ./Shop/42.shtml ./Shhop/42.shttml工厂生产产管理学学院52套讲座座+ 1139220份资料 HYPERLINK ./Sho

3、p/43.shtml ./Shhop/43.shttml财务管理理学院53套讲座座+ 1179445份资料 HYPERLINK ./Shop/45.shtml ./Shhop/45.shttml销售经理理学院56套讲座座+ 1143550份资料 HYPERLINK ./Shop/46.shtml ./Shhop/46.shttml销售人员员培训学学院72套讲座座+ 448799份资料 HYPERLINK ./Shop/47.shtml ./Shhop/47.shttml题目:抽象象工厂模模式学生姓名 张 婧 学 号 200102210777 院 系 信息息科学与与技术学学院 专 业 计算机机应

4、用技技术 年 级 20110 级级 抽象工厂模模式在软件系统统中,经经常面临临着“一系列列相互依依赖的对对象”的创建建工作;同时由由于需求求的变化化,往往往存在着着更多系系列对象象的创建建工作。如如何应对对这种变变化?如如何绕过过常规的的对象的的创建方方法(nnew),提提供一种种“封装机机制”来避免免客户程程序和这这种“多系列列具体对对象创建建工作”的紧耦耦合?这这就要用用到抽象象工厂模模式。抽抽象工厂厂模式是简简单工厂厂模式和工工厂方法法模式的升升级版,它它有更大大的灵活活性,同同时也更更加复杂杂一些。为了理解抽抽象工厂厂,我们们考虑这这样一个个实际例例子:如如果你想想吃饭了了,怎么么办自

5、己己做吗?自己做做就相当当于程序序中直接接使用nnew。当当然是自自己下个个指令,别别人来做做更爽。那那就把做做饭的任任务交给给厨师吧,那那么他就是一一个做饭饭的工厂厂了,你你告诉他他要吃红红烧肉,等等会他就从厨厨房给你你端出来来一盘香香喷喷的的红烧肉肉了,再再来个清清蒸鱼吧吧。下图图 1 就是这这个问题题的模型型。 图1 显显然到了了这里,你你是Clliennt,厨厨师就是是工厂,他拥有做红烧肉的方法,做清蒸鱼的方法,这些方法返回值就是食物抽象。红烧肉、清蒸鱼就是食物的继承类,简单工厂模式也成型了。简单工厂模模式结构构图2优点:允许许客户端端相对独独立的创创建产品品的过程程,并且且在系统统引

6、入新新产品的的时候无无需修改改客户端端。 缺点:对修修改不封封闭,新新增加产产品您要要修改工工厂。违违法了开开闭法则则(OCCP)。工厂方法模式生活例子: 厨师手艺再再好,总总有不会会做的菜菜,你想想吃回锅锅肉,怎怎么办,让让厨师学呗呗,于是是就给他他新增了了做回锅锅肉的方方法,以以后你再再想吃一一个新菜菜,就要要给厨师师新加一一个方法法,显然然此做法法的缺点点也就暴暴露出来来了,用用程序设设计的描描述就是是对修改改永远不不能封闭闭。 面面对上面面对修改改不能封封闭的问问题,有有没有好好的解决决方案吗吗?把厨师抽象象变成一一个基类类,你请请几个具具体的厨厨师,分分别有做做清蒸鱼鱼的,做做红烧肉

7、肉的厨师,如如果你想想吃一个个新菜,就就再新找找个厨师师,从你你的厨师师基类继继承一下下,让他他来做这这个新菜菜。现在在来看这这个模式式发生了了变化,结结构中多多了一个个厨师的的抽象,抽抽象并不不具体的的加工产产品了,至至于做什什么,是是由这个个抽象工工厂的继继承子类类来实现现,现在在的模式式也就变变成工厂厂方法模模式了,这这个上面面的结构构图1就就变成了了下面的的图3的的结构了了。 图33 现在在再来分分析现在在的模式式,显然然简单工工厂的缺缺陷解决决了,新新增加一一个菜只只需要新新增加一一个厨师师就行了了,原来来的厨师师还在做做原来的的工作,这这样你的的设计就就对修改改封闭了了。工厂方法模

8、模式结构构 图44优点:优化化简单工工厂模式式,做到到“开-闭闭”原则。可可做到把把具体的的产品创创建过程程延迟到到具体的的子类工工厂。缺点:对于于创建不不同系列列的产品品无能为为力。 抽象工厂模模式生活活例子 你发现菜可可分成许多菜菜系,鲁鲁菜、粤粤菜、湘湘菜等等等,它们们各有各各的风味味,同样样是红烧烧肉由不不同菜系系出来的的味道也也各不相相同。如如果你的的厨师都都是鲁菜菜风味,广东的的朋友来来了吃不不惯,怎怎么办?现在我们再再回到简简单工厂厂模式,我我们把红红烧肉再再向下继继承,生生成鲁菜菜红烧肉肉、粤菜菜红烧肉肉、湘菜菜红烧肉肉;清蒸蒸鱼向下下继承为为鲁菜清清蒸鱼、粤粤菜清蒸蒸鱼、湘湘

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

10、std;/红烧肉肉classs CHHonggshaaorooupubliic: vvirttuall CCHonngshhaorrou() ; /产品品使用公公共接口口 vvirttuall vooid Staart() = 0;/抽抽象基类类,纯虚虚函数由由派生类类去实现现; /鲁菜菜红烧肉肉classs CHHonggshaaoroouLuucaii : pubblicc CHHonggshaaorooupubliic: CCHonngshhaorrouLLucaai() couut 制作鲁鲁菜红烧烧肉. enndl; vvirttuall CCHonngshhaorrouLLucaai

11、() ; vvirttuall vooid Staart() couut 鲁菜红红烧肉好好了. enndl; ;/粤菜红红烧肉classs CHHonggshaaoroouYuuecaai : puubliic CCHonngshhaorroupubliic: CCHonngshhaorrouYYueccai() couut 制作粤粤菜红烧烧肉. enndl; vvirttuall CCHonngshhaorrouYYueccai() ; vvirttuall vooid Staart() couut 粤菜红红烧肉好好了. enndl; ; /清蒸蒸鱼classs Cqqinggzheengy

12、yupubliic: vvirttuall CCqinngzhhenggyu() ; /产品品使用公公共接口口 vvirttuall vooid Staart() = 0;/抽抽象基类类,纯虚虚函数由由派生类类去实现现; /鲁菜菜清蒸鱼鱼classs CqqinggzheengyyuLuucaii : pubblicc Cqqinggzheengyyupubliic: CCqinngzhhenggyuLLucaai() couut 制作鲁鲁菜清蒸蒸鱼. enndl; vvirttuall CCqinngzhhenggyuLLucaai() ; vvirttuall vooid Staart()

13、 couut 鲁菜清清蒸鱼好好了. enndl; ; /粤菜菜清蒸鱼鱼classs CqqinggzheengyyuYuuecaai : puubliic CCqinngzhhenggyupubliic: CCqinngzhhenggyuYYueccai() couut 制作粤粤菜清蒸蒸鱼. enndl; vvirttuall CCqinngzhhenggyuYYueccai() ; vvirttuall vooid Staart() couut 粤菜清清蒸鱼好好了. enndl; ;/抽象工工厂classs CFFacttoryypubliic: vvirttuall CCFacctorry

14、(); vvirttuall CHHonggshaaoroou* CreeateeHonngshhaorrou() = 0; vvirttuall Cqqinggzheengyyu* Creeateeqinngzhhenggyu() = 0;/鲁菜工工厂classs CLLucaaiFaactoory : ppubllic CFaactoorypubliic: CCLuccaiFFacttoryy() couut 制作鲁鲁菜工厂厂. enddl; vvirttuall CCLuccaiFFacttoryy(); vvirttuall CHHonggshaaoroou* CreeateeHonn

15、gshhaorrou() retturnn neew CCHonngshhaorrouLLucaai; ; vvirttuall Cqqinggzheengyyu* Creeateeqinngzhhenggyu() retturnn neew CCqinngzhhenggyuLLucaai; ;/粤菜工工厂classs CYYueccaiFFacttoryy : pubblicc CFFacttoryypubliic: CCYueecaiiFacctorry() couut 制作粤粤菜工厂厂. CreeateeHonngshhaorrou();/制作作红烧肉肉 ppqinngzhhenggyu

16、 = ppFacctorry-Creeateeqinngzhhenggyu();/制作作清蒸鱼鱼 ppHonngshhaorrou-Sttartt(); ppqinngzhhenggyu-Sttartt(); ddeleete pqiingzzhenngyuu; ddeleete pHoongsshaoorouu;int mmainn() CCFacctorry* pFaactoory = NNULLL;/抽象工工厂 /鲁菜菜工厂。做做红烧肉肉,清蒸蒸鱼 ppFacctorry = neew CCLuccaiFFacttoryy;/制作鲁鲁菜工厂厂 TTestt(pFFacttoryy); d

17、deleete pFaactoory; ccoutteendll; /粤菜菜工厂。做做红烧肉肉,清蒸蒸鱼 ppFacctorry= neww CYYueccaiFFacttoryy;/制作粤粤菜工厂厂 TTestt(pFFacttoryy); ddeleete pFaactoory; ssysttem(paausee); rretuurn 0;优点:将客客户端与与具体的的类分离离。一个个产品系系列中的的多个对对象被设设计在一一起工作作,能保保证客户户端始终终只使用用一个产产品系列列,且有有利于更更新产品品系列。缺点:难以以支持新新品种产产品。抽象工厂模模式与工工厂方法法模式的的区别 a重点不不同。工工厂方法法模式强强调的是是不同的的创建者者根据自自身需求求去生产产不同的的具体产产品,重重点是生生产具体体产品;而抽象象工厂模模式则定定位为“在不指指定实体体类别的的前

温馨提示

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

评论

0/150

提交评论