计算机科学与技术学院实验报告课程名称:软件设计模式专业:计算机科学与技术班级:2011级1班学号:201113137040姓名:刘进平实验一单例模式的应用1实验目的1)掌握单例模式(Singleton)的特点2)分析具体问题,使用单例模式进行设计。2实验内容和要求很多应用项目都有配置文件,这些配置文件里面定义一些应用需要的参数数据。通常客户端使用这个类是通过new一个AppConfig的实例来得到一个操作配置文件内容的对象。如果在系统运行中,有很多地方都需要使用配置文件的内容,系统中会同时存在多份配置文件的内容,这会严重浪费内存资源。事实上,对于AppConfig类,在运行期间,只需要一个对象实例就够了。那么应该怎么实现呢?用C#控制台应用程序实现该单例模式。绘制该模式的UML图。UML图:+GetParameterA()+SetParameterA()-ParameterA:stringAppConfig源代码:classProgram{staticvoidMain(string[]args){AppConfigappConfigOne=AppConfig.GetParameterA();AppConfigappConfigTwo=AppConfig.GetParameterA();if(appConfigOne.Equals(appConfigTwo)){Console.WriteLine(appConfigOne和appConfigTwo代表的是同一个实例!);}else{Console.WriteLine(appConfigOne和appConfigTwo代表的是不同的实例!);}Console.ReadKey();}}}运行结果:实验小结:通过这次实验,我了解了单例模式的具体概念和使用方法,并且感受到了他的优点带来的方便,但是同时也知道了该设计模式的缺点:由于单例模式中没有抽象层,因此单例类的扩展有很大困难。实验二工厂模式的应用1实验目的1)掌握工厂模式(Factory)的特点2)分析具体问题,使用工厂模式进行设计。2实验内容和要求有一个OEM制造商代理做HP笔记本电脑(Laptop),后来该制造商得到了更多的品牌笔记本电脑的订单Acer,Lenovo,Dell,该OEM商发现,如果一次同时做很多个牌子的本本,有些不利于管理。利用工厂模式改善设计,用C#控制台应用程序实现该OEM制造商的工厂模式。绘制该模式的UML图。UML图:源代码:classLaptop{publicvirtualvoidGetLaptop(){}}classHpLaptop:Laptop{publicoverridevoidGetLaptop(){Console.WriteLine(生产了一台Hp电脑);}}classAcerLaptop:Laptop{publicoverridevoidGetLaptop(){Console.WriteLine(生产了一台Acer电脑);}}classLenovoLaptop:Laptop{publicoverridevoidGetLaptop(){Console.WriteLine(生产了一台Lenovo电脑);}}classDellLaptop:Laptop{publicoverridevoidGetLaptop(){Console.WriteLine(生产了一台Dell电脑);}}interfaceIFactory{LaptopCreateFactory();}classHpFactory:IFactory{publicLaptopCreateFactory(){returnnewHpLaptop();}}classAcerFactory:IFactory{publicLaptopCreateFactory(){returnnewAcerLaptop();}}classLenovoFactory:IFactory{publicLaptopCreateFactory(){returnnewLenovoLaptop();}}classDellFactory:IFactory{publicLaptopCreateFactory(){returnnewDellLaptop();}}classProgram{staticvoidMain(string[]args){IFactorylaptopFactory=newLenovoFactory();IFactorylaptopFactory1=newHpFactory();IFactorylaptopFactory2=newAcerFactory();IFactorylaptopFactory3=newDellFactory();Laptoplaptop=laptopFactory.CreateFactory();Laptoplaptop1=laptopFactory1.CreateFactory();Laptoplaptop2=laptopFactory2.CreateFactory();Laptoplaptop3=laptopFactory3.CreateFactory();laptop.GetLaptop();laptop1.GetLaptop();laptop2.GetLaptop();laptop3.GetLaptop();Console.ReadKey();}}}运行结果:实验小结:通过本次实验,我了解了工厂模式的适用范围和他的一些特点,工厂模式在一定程度上解决某些代码违反了面向对象设计的开放封闭原则。同时还了解了它的一些优点和弊端,比如:使用工厂方法模式的另一个优点是在系统中加入新产品时,无需修改抽象工厂和抽象产品提供的接口,无需修改客户端,也无需修改其它的具体工厂和具体产品,而只要添加一个新的具体工厂和具体产品即可。实验三抽象工厂模式的应用1实验目的1)掌握抽象工厂模式(AbstractFactory)的特点2)分析具体问题,使用抽象工厂模式进行设计。2实验内容和要求麦当劳(McDonalds)和肯德基(KFC)快餐店都经营汉堡(Hamburg)和可乐(Cola),用C#控制台应用程序实现这两个快餐店经营产品的抽象工厂模式。绘制该模式的UML图。UML图:源代码:interfaceIHamburg{voidHamburgName();}classMcDonaldsHamburg:IHamburg{publicvoidHamburgName(){Console.WriteLine(这是McDonaldsHamburg);}}classKFCHamburg:IHamburg{publicvoidHamburgName(){Console.WriteLine(这是KFCHamburg);}}interfaceICola{voidColaName();}classMcDonaldsCola:ICola{publicvoidColaName(){Console.WriteLine(这是McDonaldsCola);}}classKFCCola:ICola{publicvoidColaName(){Console.WriteLine(这是KFCCola);}}interfaceIFactory{IHamburgCreateHamburg();IColaCreateCola();}classMcDonaldsFactory:IFactory{publicIHamburgCreateHamburg(){returnnewMcDonaldsHamburg();}publicIColaCreateCola(){returnnewMcDonaldsCola();}}classKFCFactory:IFactory{publicIHamburgCreateHamburg(){returnnewKFCHamburg();}publicIColaCreateCola(){returnnewKFCCola();}}classProgram{staticvoidMain(string[]args){IFactoryfactory=newKFCFactory();IFactoryfactory1=newMcDonaldsFactory();IHamburghamburg1=factory1.CreateHamburg();IColacola1=factory1.CreateCola();IHamburghamburg=factory.CreateHamburg();IColacola=factory.CreateCola();hamburg.HamburgName();cola.ColaName();hamburg1.HamburgName();cola1.ColaName();Console.ReadKey();}}}运行结果:实验小结:通过本次实验,加深了对抽象工厂模式的理解。抽象工厂提供一个创建一系列相关或相互依赖对象的接口,而不需指定他们具体的类。抽象工厂同样是存在缺点的,难以支持新种类的产品。由于以前对C++不太了解,本次实验加深了对C++的了解,强化了编程能力。理解解了构造函数,虚函数,纯虚函数,成员函数实现,类之间的继承等含义。但对于函数的调用问题常常出错,这在以后的学习中应多加注意和练习。实验四建造者模式的应用1实验目的1)掌握建造者模式(Builder)的特点2)分析具体问题,使用建造者模式进行设计。2实验内容和要求建造者模式是一种创建型模式,它主要是应对项目中一些复杂对象的创建工作。所谓“复杂对象”,是指此对象中还含有其它的子对象。我们现在定义一个场景:汽车生产必须包含车轮(Wheel)、油箱(OilBox)和车身(Body),应用建造者模式,用C#控制台应用程序实现该设计,构建BMW品牌和BenZ品牌汽车生产。绘制该模式的UML图。UML图:源代码:publicabstractclassICar{publicabstractvoidWheel();publicabstractvoidOilBox();publicabstractvoidBody();}classBenz:ICar{publicoverridevoidWheel(){Console.Write(奔驰的轮子,);}publicoverridevoidOilBox(){Console.Write(奔驰的油箱,);}publicoverridevoidBody(){Console.WriteLine(奔驰的车体!);}}classBMW:ICar{publicoverridevoidWheel(){Console.Write(宝马的轮子,);}publicoverridevoidOilBox(){Console.Write(宝马的油箱,);}publicoverridevoidBody(){Console.WriteLine(宝马的车体!);}}classDriver{publicvoidinclude(ICarcar){car.Wheel();car.OilBox();car.Body();}}classProgram{staticvoidMain(string[]args){ICarcar=newBenz();ICarcar1=newBMW();Driverzhangsan=newDriver();zhangsan.include(car);Driverlisi=newDriver();lisi.include(car1);Console.ReadKey();}}}运行结果:实验小结:建造者模式的设计目的是消除其他对象的复杂创建过程。使用建造者模式不仅是最佳的做法,而且在某个对象的构建和配制方法改变时可以尽量减少重复更改代码实验五适配器模式的应用1实验目的1)掌握适配器模式(Adapter)的特点2)分析具体问题,使用适配器模式进行设计。2实验内容和要求一个软件团队开发绘图系统,设