抽象工厂(Abstract-Factory)模式

上传人:回**** 文档编号:205491058 上传时间:2023-04-29 格式:DOC 页数:13 大小:253KB
收藏 版权申诉 举报 下载
抽象工厂(Abstract-Factory)模式_第1页
第1页 / 共13页
抽象工厂(Abstract-Factory)模式_第2页
第2页 / 共13页
抽象工厂(Abstract-Factory)模式_第3页
第3页 / 共13页
资源描述:

《抽象工厂(Abstract-Factory)模式》由会员分享,可在线阅读,更多相关《抽象工厂(Abstract-Factory)模式(13页珍藏版)》请在装配图网上搜索。

1、一、抽象工厂(AbsttFacory)模式抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。为了以便引进抽象工厂模式,引进一种新概念:产品族(ProdctFamily)。所谓产品族,是指位于不同产品级别构造,功能有关联的产品构成的家族。如图:图中一共有四个产品族,分布于三个不同的产品级别构造中。只要指明一种产品所处的产品族以及它所属的级别构造,就可以唯一的拟定这个产品。引进抽象工厂模式所谓的抽象工厂是指一种工厂级别构造可以创立出分属于不同产品级别构造的一种产品族中的所有对象。如果用图来描述的话,如下图:二、Abstact act模式的构造:图中描述的东西用产品族描述如下:抽象工

2、厂(bstact Fctory)角色:担任这个角色的是工厂措施模式的核心,它是与应用系统商业逻辑无关的。具体工厂(oncet Facory)角色:这个角色直接在客户端的调用下创立产品的实例。这个角色具有选择合适的产品对象的逻辑,而这个逻辑是与应用系统的商业逻辑紧密有关的。抽象产品(Atct Prouct)角色:担任这个角色的类是工厂措施模式所创立的对象的父类,或它们共同拥有的接口。具体产品(CocretProduct)角色:抽象工厂模式所创立的任何产品对象都是某一种具体产品类的实例。这是客户端最后需要的东西,其内部一定布满了应用系统的商业逻辑。三、程序举例:该程序演示了抽象工厂的构造,自身不具

3、有任何实际价值。/AbstractFactoyattern-StrucralexapeusigSystem;/bsratFactoryasttcasstractFacory/ehodsratpubicAbtractrodctACeaeProdcA();abstrctubliAbstractPoduBCeateoduct();CncrtFaorylassCocretectory1:AtrctFcto/ehsoveridepulictractroductCeteProuct()retunewPoucA1();overdepulicAbsractProdutBCreaeroductB()return

4、ewProductB1();/onceFactory2csConreactor2:AbtactaryeodsoveridepubicAbstctPoducAreateProuctA()rtunewProucA2();overidublicAbstactProucBCreateProductB()reurnnewPoduct2();/AbstractductAabactcassbtractPrductAtractPouctBabsrctclassbstractPrduct/MethodsabsactpblvoiIntact(AstrtProduct);/Product1cssProct1:bst

5、actructA/ProductB1caPductB1:AstratPoductBMethdsverdepublicoidntet(AbstractProdAa)onsle.WriteLne(hisinteraswith+a);/roduA2lassPru2:ArtPoducA/ProducB2classroctB:AbstacProdtB/thodvedeublcoidIneract(AbstractPrctAa)onoe.rieine(ths+interactswth+a);/Client-theieractoeniomentothroductssEnvirmnt/esrveAstract

6、PrducAAbtrctrouctA;pivateAbtactouctBAbsracPodutB;Constorsplicnvionment(AbractFactoyatory)AbctrouctBfaoryCreateProducB();AbstractProduct=factor.CreateroducA();/MethospucvodRun()AbsraProdctB.Iteract(AbsrctPrdutA);/suary/CentAppestenviront/classClientppubicstaticvodMi(trinars)AbstractFacoryfaty1ewoncre

7、teFctoy1();Enviromte=ewnvinmnt(tory1);.Run();AbstratFactoryacory2=newoncreFo2();Environnt2=newEnviroment(fatory);2.Run();四、在什么情形下使用抽象工厂模式:在如下状况下应当考虑使用抽象工厂模式: 一种系统不应当依赖于产品类实例如何被创立、组合和体现的细节,这对于所有形态的工厂模式都是重要的。 这个系统有多于一种的产品族,而系统只消费其中某一产品族。 同属于同一种产品族的产品是在一起使用的,这一约束必须在系统的设计中体现出来。 系统提供一种产品类的库,所有的产品以同样的接口浮现

8、,从而使客户端不依赖于实现。五、抽象工厂的来源据说最早的应用是用来创立在不同操作系统的视窗环境下都可以运营的系统。例如在Window与Unix系统下均有视窗环境的构件,在每一种操作系 统中,均有一种视窗构件构成的构件家族。我们可以通过一种抽象角色给出功能描述,而由具体子类给出不同操作系统下的具体实现,如图:可以发现上面产品类图有两个产品级别构造,分别是Btn与Tet;同步有两个产品族:nix产品族与Windows产品族。系统对产品对象的创立规定由一种工厂的级别构造满足。其中有两个具体工厂角色,即UnixFactory和WinFacty。nixFacory对象负责创立Unix产品族中的产品,而W

9、iactory负责创立Wdws产品族中的产品。显然一种系统只可以在某一种操作系统的视窗环境下运营,而不能同步在不同的操作系统上运营。因此,系统事实上只能消费属于同一种产品族的产品。在现代的应用中,抽象工厂模式的使用范畴已经大大扩大了,不再规定系统只能消费某一种产品族了。六、Abstat ato模式在实际系统中的实现Herboe:草食动物arniore:食肉动物Bison:bain,美洲或欧洲的野牛下面实际代码演示了一种电脑游戏中创立不同动物的抽象工厂。尽管在不同大陆下动物物种是不同样的,但动物间的关系仍然保存了下来。/AbsractFatoyptte-RalWoldxmlesnSym;/Abs

10、tractFctryabsrtcntinentFaory/MethdsbtracpublicHerbivoreCrateebivore();abstcublicarnivoreCreatCanivore();/CoretFacty1clsArcaFactory:ontientFactory/todsovideublicHerbvoreCreteHerbore()rturnneWileeest();oerideubcarnivoreCreatCarnvore()eturnewLion();/ncteFacr2classAmeriaFary:ConinFactry/Mehodsoveiepubli

11、cHerivoreCreeHerbvore()eunneson();oveiepubicCarnivorreteCrivoe()returnnewWlf();/AbsrctPrductbtactasHerbiore/AbsactPrductBabtrtclassCnivore/MethdsbstrapubliciEat(Herivreh);/ProdcclaWldebes:rvr/ProuctB1ssLion:Carniore/hodsoerridepulicvidEat(erivreh)/eatwildeeetCnsole.WriLne(ths+eas+);/PoductA2clssson:

12、Herbivore/ProuctBassolf:Canivor/MthdsoverridpulicvoidEat(Hebivore)/EatbionConse.WiteLine(thisas+);/ClintclasAnimalWorld/FieldsprivateHrivorehrbivoe;prvatCarnivrecarnivore;/nsrucospublicniaol(ContnentFoyfactory)carnivore=fctoryatCrnvore();herbvorefcory.reateHeriore();/MehodublicvidunFoodan()crnvore.E

13、at(herire);/summary/GaeApestlas/classGmeApppublictaticodMain(tingars)/CretearuthfiaanimloCntinetctryafricanwAfrcactory();AnimalWorldrldneAimalWold(afra);wrld.RunFoodCan();/CreatedrunthAmeriaimawolninenFactorameria=ewericaFator();wld=newnimalWorld(amerc);wr.unoodChai();抽象工厂的此外一种例子:如何设计抽象类工厂留作思考。七、开放-封闭原则开放封闭原则规定系统对扩展开放,对修改封闭。通过扩展达到增强其功能的目的。对于波及到多种产品族与多种产品级别构造的系统,其功能增强涉及两方面:增长产品族:AbsactFacory较好的支持了开放封闭原则。增长新产品的级别构造:需要修改所有的工厂角色,没有较好支持开放封闭原则。综合起来,抽象工厂模式以一种倾斜的方式支持增长新的产品,它为新产品族的增长提供以便,而不能为新的产品级别构造的增长提供这样的以便。

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!