设计模式实验报告

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

计算机科学与技术学院实验报告课程名称:软件设计模式专业:计算机科学与技术班级:DB1002班学号:201012137040姓名:孙谦实验一单例模式的应用1实验目的1)掌握单例模式(Singleton)的特点2)分析具体问题,使用单例模式进行设计。2实验内容和要求很多应用项目都有配置文件,这些配置文件里面定义一些应用需要的参数数据。+GetParameterA()+SetParameterA()-ParameterA:stringAppConfig通常客户端使用这个类是通过new一个AppConfig的实例来得到一个操作配置文件内容的对象。如果在系统运行中,有很多地方都需要使用配置文件的内容,系统中会同时存在多份配置文件的内容,这会严重浪费内存资源。事实上,对于AppConfig类,在运行期间,只需要一个对象实例就够了。那么应该怎么实现呢?用C#控制台应用程序实现该单例模式。绘制该模式的UML图。[代码截图]:namespace实验一_单例模式_{classProgram{staticvoidMain(string[]args){AppConfigappc1=AppConfig.GetAppConfig();AppConfigappc2=AppConfig.GetAppConfig();appc1.SetParameterA(hello);appc2.SetParameterA(hi);if(appc1.Equals(appc2)){Console.WriteLine(appc1和appc2代表的是同一个实例);}else{Console.WriteLine(appc1和appc2代表的是不同实例);}Console.WriteLine(appc1.GetParameterA());Console.WriteLine(appc2.GetParameterA());Console.ReadKey();}}publicclassAppConfig{privatestringParameterA;privatestaticAppConfigappc=null;//1:私有化构造方法,便于在内部控制创建实例的数目privateAppConfig(){}publicstaticAppConfigGetAppConfig(){if(appc==null){appc=newAppConfig();}returnappc;}publicstringGetParameterA(){returnParameterA;}publicvoidSetParameterA(stringParameterA){this.ParameterA=ParameterA;}}[运行结果]:实验二工厂模式的应用1实验目的1)掌握工厂模式(Factory)的特点2)分析具体问题,使用工厂模式进行设计。2实验内容和要求有一个OEM制造商代理做HP笔记本电脑(Laptop),后来该制造商得到了更多的品牌笔记本电脑的订单Acer,Lenovo,Dell,该OEM商发现,如果一次同时做很多个牌子的本本,有些不利于管理。利用工厂模式改善设计,用C#控制台应用程序实现该OEM制造商的工厂模式。绘制该模式的UML图。[代码截图]:abstractclassLaptop{privatestringlaptopName;publicabstractstringproduce();}classHP:Laptop{//Acer、Lenovo、Dell类似publicoverridestringproduce(){return(成产HP电脑);}}//工厂方法interfaceLaptopFactory{LaptopCreateLaptop();}//专门负责生产“HP”的工厂classHPFactory:LaptopFactory//Acer、Lenovo、Dell类似{publicLaptopCreateLaptop(){returnnewHP();}}staticvoidMain(string[]args){LaptopFactorylapf=newHPFactory();Laptoplap=lapf.CreateLaptop();Console.WriteLine(结果是:+lap.produce());LaptopFactorylapf2=newAcerFactory();lap=lapf2.CreateLaptop();Console.WriteLine(结果是:+lap.produce());Console.ReadKey();}[运行结果]:实验三抽象工厂模式的应用1实验目的1)掌握抽象工厂模式(AbstractFactory)的特点2)分析具体问题,使用抽象工厂模式进行设计。2实验内容和要求麦当劳(McDonalds)和肯德基(KFC)快餐店都经营汉堡(Hamburg)和可乐(Cola),用C#控制台应用程序实现这两个快餐店经营产品的抽象工厂模式。绘制该模式的UML图。[代码截图]://汉堡(“可乐”与此类似)interfaceHamburg{stringproduceHamburg();}classKFChb:Hamburg{publicstringproduceHamburg(){return(KFCHamburg);}}classMcDonaldshb:Hamburg{publicstringproduceHamburg(){return(McDonaldsHamburg);}}interfaceFoodFactory{HamburgCreateHamburg();ColaCreateCola();}classKFCFactory:FoodFactory{publicHamburgCreateHamburg(){returnnewKFChb();}publicColaCreateCola(){returnnewKFCcl();}}staticvoidMain(string[]args){FoodFactoryfactory=newKFCFactory();//KFCFactory();FoodFactoryfactory2=newMcDonaldsFactory();Hamburghb=factory.CreateHamburg();Colacl=factory2.CreateCola();Console.WriteLine(结果是:+hb.produceHamburg());Console.WriteLine(结果是:+cl.produceCola());Console.ReadKey();}[运行结果]:实验四建造者模式的应用1实验目的1)掌握建造者模式(Builder)的特点2)分析具体问题,使用建造者模式进行设计。2实验内容和要求建造者模式是一种创建型模式,它主要是应对项目中一些复杂对象的创建工作。所谓“复杂对象”,是指此对象中还含有其它的子对象。我们现在定义一个场景:汽车生产必须包含车轮(Wheel)、油箱(OilBox)和车身(Body),应用建造者模式,用C#控制台应用程序实现该设计,构建BMW品牌和BenZ品牌汽车生产。绘制该模式的UML图。[代码截图]:classCar{privatestringwheel;privatestringoilBox;privatestringbody;publicstringWheel{//OilBox、Body类似,此处省略代码set{wheel=value;}get{returnwheel;}}publicvoidIntroduce(){Console.WriteLine(Wheel);Console.WriteLine(OilBox);Console.WriteLine(Body);Console.WriteLine();}}abstractclassCarBuilder{protectedCarcar=newCar();publicabstractvoidBuildWheel();publicabstractvoidBuildOilBox();publicabstractvoidBuildBody();publicCarGetResult(){returncar;}}classConcreteBuilderBMW:CarBuilder//BenZ类似,省略{publicoverridevoidBuildWheel(){car.Wheel=FinishWheelforBMWcar;}//BuildOilBox()、BuildBody()……}classDirector//指挥者类{privateCarBuilderbuilder;publicDirector(CarBuilderbuilder){this.builder=builder;}publicvoidSetBuilder(CarBuilderbuilder){this.builder=builder;}publicvoidConstruct(){builder.BuildWheel();builder.BuildOilBox();builder.BuildBody();}}staticvoidMain(string[]args){Carcar;CarBuildercbd=newConcreteBuilderBMW();Directordt=newDirector(cbd);dt.Construct();car=cbd.GetResult();car.Introduce();cbd=newConcreteBuilderBenZ();dt.SetBuilder(cbd);dt.Construct();car=cbd.GetResult();car.Introduce();Console.ReadKey();}[运行结果]:实验五适配器模式的应用1实验目的1)掌握适配器模式(Adapter)的特点2)分析具体问题,使用适配器模式进行设计。2实验内容和要求一个软件团队开发绘图系统,设计了圆对象(Circle)、矩形对象(Rectangle),线对象(Line)都支持Draw()函数,即可以通过Draw()函数绘制图形。为了加快项目进度,将角度对象(Angle)绘制功能交给了合作团队实现。但合作团队将角度对象绘制函数定为了DrawAngle()。绘图系统提供给用户后,用户不满意,希望能统一的调用,不用记太多命令。应用适配器模式,用C#控制台应用程序完善该设计。绘制该模式的UML图。abstractclassPicture{protectedstringname;publicPicture(stringname){this.name=name;}publicabstractvoidDraw();}classCircle:Picture//圆对象(Rectangle、Rectangle……){publicCircle(stringname):base(name){//this.name=name;}publicoverridevoidDraw(){Console.WriteLine(Drawcircle:+name);}}classAngle//角度{privatestringname;publicstringName{get{returnname;}set{name=value;}}publicvoidDrawAngle(){Console.WriteLine(Drawangle:+name);}}classTranslator:Picture//翻译者{privateAngleangle=newAngle();publicTranslator(stringname):base(name){angle.Name=name;}publicoverridevoidDraw(){angle.DrawAngle();}}staticvoidMain(stri

1 / 23
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功