欢迎来到天天文库
浏览记录
ID:44296469
大小:55.50 KB
页数:5页
时间:2019-10-20
《工厂模式和策略模式》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、名词理解:ir(Factory)模式我们可以做如下理解,假设有一•个Audi的公司生产汽车(似乎也不用假设了),它掌握一项核心的技术就是生产汽车,另一方面,它生产的汽车是有不同型号的,并且在不同的生产线上进行组装。当客户通过销售部门进行预定后,Audi公司将在指定的生产线上为客户生产出它所需要的汽车。策略(Strategy)模式在结构上与工厂模式类似,唯一的区别是工厂模式实例化一个产品的操作是在服务端來做的,换句话说客户端传达给服务端的只是某种标识,服务端根据该标识实例化一个对象。而策略模式的客户端传达给服务端的是一个实例,服务端只是将该实例拿过去在服务端的环境里执行该实例的方法。这就好比一
2、个对汽车不甚了解的人去买车,他在那一比划,说要什么什么样的,销售部门根据他的这个“比划”来形成一份订单,这就是工厂模式下的工作方式。而策略模式下那个顾客就是个行家,他自己给出了订单的详细信息,销售部门只是转了一下手就交给生产部门去做了。通过两相对比,我们不难发现,采用工厂模式必须捉供足够灵活的销售部门,如果用户冇了新的需求,销售部门必须马上意识到这样才可以做出合适的订单。所以倘一款新车出来了,生产部门和销售部门都需要更新,对顾客来说也需要更新对新车的描述所以需要改动的地方有三处。而策略模式中的销售部门工作比较固定,它只负责接受订单并执行特定的几个操作。当一款新车出來时,只需要对服务端的生产部
3、门和客户端的代码进行更新,而不需要更新销售部门的代码。技术支持:简单工厂和策略的基础都是因为面向对象的封装与多态。他们实现的思想都是先设定一个抽象的模型并从该模型派生岀符合不同客户需求的各种方法,并加以封装。模型:Audi公司的产品有A6,A4,TT,R&.•我们如果将毎种车的生产做一个方法,那么我们的模型结构应该是这样的namespaceConsoleApplication5{classAudi{publicvoidCreateA4(){//Dosometing}publicvoidCreateA6(){//Dosomething}publievoidCreateTT()//Dosomet
4、hing}}设想一下如果Audi岀了一款新车,那么我们必须要在Audi这个类里边添加新的方法,这就要求总公司提供对Audi这个类的修改权限,如果新车项口的负责人对其他车型的负责人有什么意见,它可以轻而易举的改乱他们的代码,让他们的工作陷入瘫痪(当然现实中没冇人会这么干)。我们的目标是新生产线的项目负责人只冇权限对自己的项目情况作岀修改,除此之外他一无所知。我们可以考虑如下的模型结构namespaceConsoleApplication5abstractclassBaseFactorypublicabstractvoidMakeCar();}classA6Factory:BaseFactory
5、{publicoverridevoidMakeCar(){Console.WriteLine(HAutiA6iscreated11);}}classA4Factory:BaseFactory{publicoverridevoidMakeCar(){Console.WriteLine(HAutiA4iscreated11);}}classTTFactory:BaseFactory{publieoverridevoidMakeCar(){Console・WriteLine(”AutiTTiscreated");}}classR8Factory:BaseFactory{publicoverride
6、voidMakeCar(){Console.WriteLine(nAutiR8iscreated");classSelectCarFactoryPatternstaticBaseFactorybf=null;publicstaticvoidOrderCar(stringstrCarType){switch(strCarType){casenA611:bf=newA6Factory();bf.MakeCar();break;case”A4”:bf=newA4Factory();bf・MakeCar();break;case"R8H:bf=newR8Factory();bf・MakeCmr();
7、break;default:Console.WriteLine(11Errorcar11);break;}}}classSelectCarStrategyPattern{BaseFactorycarFactory=null;publicSeiectCarStrategyPattern(BaseFactorycarFactory){this•carFactory=carFactory;}publicvoidOr
此文档下载收益归作者所有