设计模式实验报告.docx
- 文档编号:24102158
- 上传时间:2023-05-24
- 格式:DOCX
- 页数:15
- 大小:34.51KB
设计模式实验报告.docx
《设计模式实验报告.docx》由会员分享,可在线阅读,更多相关《设计模式实验报告.docx(15页珍藏版)》请在冰豆网上搜索。
设计模式实验报告
实验一单例模式的应用
1实验目的
1)掌握单例模式(Singleton)的特点
2)分析具体问题,使用单例模式进行设计。
2实验内容和要求
很多应用项目都有配置文件,这些配置文件里面定义一些应用需要的参数数据。
通常客户端使用这个类是通过new一个AppConfig的实例来得到一个操作配置文件内容的对象。
如果在系统运行中,有很多地方都需要使用配置文件的内容,系统中会同时存在多份配置文件的内容,这会严重浪费内存资源。
事实上,对于AppConfig类,在运行期间,只需要一个对象实例就够了。
那么应该怎么实现呢?
用C#控制台应用程序实现该单例模式。
绘制该模式的UML图。
3实验代码
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Threading.Tasks;
namespaceAppConfig
{
publicclassSingleton
{
privatestaticSingletoninstance;
privateSingleton()
{
}
publicstaticSingletonGetInstance()
{
if(instance==null)
{
instance=newSingleton();
}
returninstance;
}
}
classProgram
{
staticvoidMain(string[]args)
{
SingletonsingletonOne=Singleton.GetInstance();
SingletonsingletonTwo=Singleton.GetInstance();
if(singletonOne.Equals(singletonTwo))
{
Console.WriteLine("singletonOne和singletonTwo代表的是同一个实例");
}
else
{
Console.WriteLine("singletonOne和singletonTwo代表的是不同实例");
}
Console.ReadKey();
}
}
}
4实验结果
实验二工厂模式的应用
1实验目的
1)掌握工厂模式(Factory)的特点
2)分析具体问题,使用工厂模式进行设计。
2实验内容和要求
有一个OEM制造商代理做HP笔记本电脑(Laptop),后来该制造商得到了更多的品牌笔记本电脑的订单Acer,Lenovo,Dell,该OEM商发现,如果一次同时做很多个牌子的本本,有些不利于管理。
利用工厂模式改善设计,用C#控制台应用程序实现该OEM制造商的工厂模式。
绘制该模式的UML图。
3实验代码
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Threading.Tasks;
namespaceFactory
{
classComputer
{
publicvirtualvoidprint()
{
Console.Write("我是Computer\n");
}
}
classHPComputer:
Computer
{
publicoverridevoidprint()
{
Console.Write("我是HPComputer\n");
}
}
classAcerComputer:
Computer
{
publicoverridevoidprint()
{
Console.Write("我是AcerComputer\n");
}
}
classDellComputer:
Computer
{
publicoverridevoidprint()
{
Console.Write("我是DellComputer\n");
}
}
interfaceIfactory
{
ComputerCreateComputer();
}
classHPFactory:
Ifactory
{
publicComputerCreateComputer()
{
returnnewHPComputer();
}
}
classAcerFactory:
Ifactory
{
publicComputerCreateComputer()
{
returnnewAcerComputer();
}
}
classDellFactory:
Ifactory
{
publicComputerCreateComputer()
{
returnnewDellComputer();
}
}
classProgram
{
staticvoidMain(string[]args)
{
Ifactoryfactory=newHPFactory();
Computercomputer=factory.CreateComputer();
computer.print();
factory=newDellFactory();
computer=factory.CreateComputer();
computer.print();
factory=newAcerFactory();
computer=factory.CreateComputer();
computer.print();
}
}
}
4实验截图
实验三抽象工厂模式的应用
1实验目的
1)掌握抽象工厂模式(AbstractFactory)的特点
2)分析具体问题,使用抽象工厂模式进行设计。
2实验内容和要求
麦当劳(McDonalds)和肯德基(KFC)快餐店都经营汉堡(Hamburg)和可乐(Cola),用C#控制台应用程序实现这两个快餐店经营产品的抽象工厂模式。
绘制该模式的UML图。
3实验代码
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Threading.Tasks;
namespaceAbstractFactory
{
classCola
{
publicvirtualvoidprint(){
Console.Write("iamcola\n");
}
}
classHum
{
publicvirtualvoidprint()
{
Console.Write("iamhamburger\n");
}
}
classKFCCola:
Cola
{
publicoverridevoidprint()
{
Console.Write("iamKFCcola\n");
}
}
classMDCola:
Cola
{
publicoverridevoidprint()
{
Console.Write("iamMDcola\n");
}
}
classKFChum:
Hum
{
publicoverridevoidprint()
{
Console.Write("iamKFChamburger\n");
}
}
classMDhum:
Hum
{
publicoverridevoidprint()
{
Console.Write("iamMDhamburger\n");
}
}
abstractclassfactory
{
publicabstractHumcreateHum();
publicabstractColacreateCola();
}
classKFCFectory:
factory
{
publicoverrideHumcreateHum()
{
returnnewKFChum();
}
publicoverrideColacreateCola()
{
returnnewKFCCola();
}
}
classMDFectory:
factory
{
publicoverrideHumcreateHum()
{
returnnewMDhum();
}
publicoverrideColacreateCola()
{
returnnewMDCola();
}
}
classProgram
{
staticvoidMain(string[]args)
{
factoryf=newKFCFectory();
Humh=f.createHum();
Colac=f.createCola();
h.print();
c.print();
f=newMDFectory();
h=f.createHum();
c=f.createCola();
h.print();
c.print();
}
}
}
4实验结果
实验四建造者模式的应用
1实验目的
1)掌握建造者模式(Builder)的特点
2)分析具体问题,使用建造者模式进行设计。
2实验内容和要求
建造者模式是一种创建型模式,它主要是应对项目中一些复杂对象的创建工作。
所谓“复杂对象”,是指此对象中还含有其它的子对象。
我们现在定义一个场景:
汽车生产必须包含车轮(Wheel)、油箱(OilBox)和车身(Body),应用建造者模式,用C#控制台应用程序实现该设计,构建BMW品牌和BenZ品牌汽车生产。
绘制该模式的UML图。
3实验代码
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Threading.Tasks;
namespaceBuilder
{
classCar
{
privateStringwheel;
privateStringoilBox;
privateStringbody;
publicvoidsetWheel(Stringwheel)
{
this.wheel=wheel;
}
publicvoidsetOilBox(StringoilBox)
{
this.oilBox=oilBox;
}
publicvoidsetBody(Stringbody)
{
this.body=body;
}
publicvoidintrouduce()
{
Console.WriteLine(wheel);
Console.WriteLine(oilBox);
Console.WriteLine(body);
}
}
abstractclassCarBuilder
{
protectedCarcar=newCar();
publicabstractvoidbuildWheel();
publicabstractvoidbuildOilBox();
publicabstractvoidbuildBody();
publicCargetCar()
{
returncar;
}
}
classBMWBuilder:
CarBuilder
{
publicoverridevoidbuildBody()
{
car.setWheel("wheelmadeinBMW");
}
publicoverridevoidbuildOilBox()
{
car.setOilBox("oilBoxmadeinBMW");
}
publicoverridevoidbuildWheel()
{
car.setBody("bodymadeinBMW");
}
}
classBenZBuilder:
CarBuilder
{
publicoverridevoidbuildBody()
{
car.setWheel("wheelmadeinBenz");
}
publicoverridevoidbuildOilBox()
{
car.setOilBox("oilBoxmadeinBenz");
}
publicoverridevoidbuildWheel()
{
car.setBody("bodymadeinBenz");
}
}
classDirector
{
privateCarBuildercarBuilder;
publicDirector(CarBuildercarBuilder)
{
this.carBuilder=carBuilder;
}
publicvoidsetCarBuilder(CarBuildercarBuilder)
{
this.carBuilder=carBuilder;
}
publicvoidconstruct()
{
carBuilder.buildWheel();
carBuilder.buildBody();
carBuilder.buildOilBox();
}
}
classProgram
{
staticvoidMain(string[]args)
{
Carcar;
CarBuildercarbuilder=newBMWBuilder();
Directordirector=newDirector(carbuilder);
director.construct();
car=carbuilder.getCar();
car.introuduce();
carbuilder=newBenZBuilder();
director.setCarBuilder(carbuilder);
director.construct();
car=carbuilder.getCar();
car.introuduce();
Console.ReadKey();
}
}
}
4实验结果
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 设计 模式 实验 报告