软件设计模式试验报告_第1页
软件设计模式试验报告_第2页
软件设计模式试验报告_第3页
软件设计模式试验报告_第4页
软件设计模式试验报告_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、武彩V披尤学_ Wuhan University of Science & Technology计算机科学与技术学院实 验 报 告课程名称:软件设计模式专业:计算机科学与技术班 级:2021级1班学与:202113137040姓名:_刘进平_Console.WriteLine( appConfigOne和appConfigTwo代表的是同一个实例!);实验一单例模式的应用1实验目的1)掌握单例模式(Singleton)的特点2)分析具体问题,使用单例模式进行设计。2实验内容和要求很多应用工程都有配置文件,这些配置文件里面定义一些应用需要的参数数 据。通常客户端使用这个类是通过new一个

2、AppConfig的实例来得到一个操作 配置文件内容的对象。如果在系统运行中,有很多地方都需要使用配置文件的内 容,系统中会同时存在多份配置文件的内容,这会严重浪费内存资源。事实上,对丁AppConfig类,在运行期间,只需要一个对象实例就够了。那 么应该怎么实现呢?用C树空制台应用程序实现该单例模式。绘制该模式的UML图。UML图:AppConfig-ParameterA : string+GetParameterA()+SetParameterA()源代码:class Programstatic void Main( string args)AppConfig appConfigOne =

3、 AppConfig .GetParameterA();AppConfig appConfigTwo = AppConfig .GetParameterA();if (appConfigOne.Equals(appConfigTwo)else(Console.WriteLine( appConfigOne和appConfigTwo代表的是不同的实例!); 1Console.ReadKey();运行结果: fi I e:/C:/U se r&/ LvYo ng/Des kto.一nIa-ppConFisfOne和appConF代表的是同一个买例!实验小结:通过这次实验,我了解了单例模式的

4、具体概念和使用方法,并且感受到了他的优点带来的方便,但是同时也知道了该设计模式的缺点:由于单例模式中没有抽象层,因此单例类的扩展有很大困难。实验二工厂模式的应用1实验目的1掌握工厂模式Factory的特点2分析具体问题,使用工厂模式进行设计。2实验内容和要求有一个OEM制造商代理做HP笔记本电脑Laptop,后来该制造商得到了更 多的品牌笔记本电脑的订单Acer, Lenovo, Dell,该OEM商发现,如果一次同时做很多个牌子的本本,有些不利丁管理。利用工厂模式改善设计,用台应用程序实现该OEM制造商的工厂模式。绘制该模式的UML图UML图:C#空制源代码:class Laptop(pub

5、lic virtual void GetLaptop() ( )class HpLaptop: Laptopclass AcerLaptop : Laptop (public override void GetLaptop()xConsole.WriteLine(生产了一台Lenovo电脑);Uif CiNteMxc#瞄中IE QflH&U村B, M-i M临寻 (public override void GetLaptop()() class DellLaptop : Laptop(public override void GetLaptop()(Console.WriteLine(

6、生产了一台Dell电脑);)interface IFactory(Laptop CreateFactory();)class HpFactory : IFactory(public Laptop CreateFactory()(return new HpLaptop();)class AcerFactory : IFactory(public Laptop CreateFactory() (return new AcerLaptop ();)class LenovoFactory : IFactory(public Laptop CreateFactory()(return new Lenov

7、oLaptop();) )class DellFactory : IFactory(public Laptop CreateFactory() (return new DellLaptop ();)classProgram(static void Main( string args)IFactory laptopFactory = new LenovoFactory ();IFactorylaptopFactoryl =new HpFactory ();IFactorylaptopFactory2 =new AcerFactory ();IFactorylaptopFactory3 =new

8、DellFactory ();Laptop laptop = laptopFactory.CreateFactory();Laptop laptop1 = laptopFactory1.CreateFactory();Laptop laptop2 = laptopFactory2.CreateFactory();Laptop laptop3 = laptopFactory3.CreateFactory();laptop.GetLaptop();laptop1.GetLaptop();laptop2.GetLaptop();laptop3.GetLaptop();Console.ReadKey(

9、);运行结果:实验小结:通过本次实验,我了解了工厂模式的适用范围和他的一些特点,工厂模式在一定程度上解决某些代码违反了面向对象设计的开放封闭原那么。同时还了解了它的一些优点和弊端,比方: 使用工厂方法模式的另一个优点是在系统中参加新产品时,无需修改抽象工厂和抽象产品提供的接口,无需修改客户端,也无需修改其它的具体工厂和具体产品,而只要添加一个新的具体工厂和具体产品即可。实验三抽象工厂模式的应用1实验目的1掌握抽象工厂模式Abstract Factory的特点2分析具体问题,使用抽象工厂模式进行设计。2实验内容和要求麦当劳McDonalds和肯德基KFC快餐店都经营汉堡Hamburg和 可乐Co

10、la,用C#控制台应用程序实现这两个快餐店经营产品的抽象工厂模式。 绘制该模式的UML图。UML图:台台1苔-TTT7产产产产龟电j j r r 1 1出在同一个UML顼U中不能网札所以&为Fact叫1,代四中依然是Factorv+ Drink。: void源代码:interface IHamburgvoid HamburgName();)class McDonaldsHamburg: IHamburg(class KFCHamburg IHamburginterface ICola(void ColaName();)class McDonaldsCola : ICola(class

11、KFCCola : ICola(public void ColaName()_Console.WriteLine(这是KFC Cola);)interface IFactoryIHamburg CreateHamburg();ICola CreateCola();)class McDonaldsFactory : IFactorypublic IHamburg CreateHamburg()return new McDonaldsHamburg);)public ICola CreateCola()( return new McDonaldsCola();_)class KFCFactory

12、: IFactory(public IHamburg CreateHamburg()(return new KFCHamburg;public ICola CreateCola()(二_return new KFCCola();class ProgramZ(二_static void Main( string args)(IFactory factory = new KFCFactory ();IFactory factory1 = new McDonaldsFactory ();IHamburg hamburg1 = factory1.CreateHamburg();ICola cola1

13、= factory1.CreateCola();IHamburg hamburg = factory.CreateHamburg();ICola cola = factory.CreateCola();hamburg.HamburgName();cola.ColaName();hamburg1.HamburgName();cola1.ColaName();Console.ReadKey();运行结果:.I file:/C:/U5ers/LvYong/Desktop/i.这号KFC HanbursrKSSMFCCola这是McDonalds Hamburg读正ncDdn&lflg Co

14、la实验小结:通过本次实验,加深了对抽象工厂模式的理解。抽象工厂提供一个创立一系列相关或相互依 赖对象的接口,而不需指定他们具体的类。抽象工厂同样是存在缺点的,难以支持新种类的产品。 由于以前对C+不太了解,本次实验加深了对C+的了解,强化了编程能力。理解解了构造函数,虚函数,纯虚函数,成员函数实现,类之间的继承等含义。但对于函数的调用问题常常出错,这在以后的学习中应多加注意和练习。实验四建造者模式的应用1实验目的1掌握建造者模式Builder的特点2分析具体问题,使用建造者模式进行设计。2实验内容和要求建造者模式是一种创立型模式,它主要是应对工程中一些复杂对象的创立工 作。所谓“复杂对象,是

15、指此对象中还含有其它的子对象。我们现在定义一个 场景:汽车生产必须包含车轮Wheel、油箱OilBox和车身Body,应用建造者 模式,用C#控制台应用程序实现该设计,构建BMW品牌和BenZ品牌汽车生 产。绘制该模式的UML图。UML图:捕象指鼎睦徽-hfl 一源代码:abstract class IDrawing(public abstract void Draw();)class Circle : IDrawing(public override void Draw()(Console.WriteLine(这是Circle里面的Drag法);_class Rectangle : IDra

16、wing(public override void Draw()(Console.WriteLine(这是Rectangle里面的Draw方法);class Line : IDrawing(public override void Draw()(Console.WriteLine(这是Line里面的Draw方法);class Angle(private Angle ag = new Angle ();( static void Main( string args)(IDrawing cc = new Circle (); cc.Draw();IDrawing rr = new Rectangl

17、e (); rr.Draw();IDrawing ll = new Line ();ll.Draw();IDrawing aa = new AdapterAngle (); aa.Draw();Console.ReadKey(); |运行结果:一_I: fil:/C:/UserVLvYBng/D妙sktop段件设计模一:U里面的Dmw方邕、 这是RcGtnsrle里面的Draw方法fe&Linei面句11时为法、这是A n g。里面的I Drawft ngle方法实验小结:适配器模式可以让任何两个没有关联的类一起运行,提高了类的复用,增加了类的透明度灵活性好,但是过多的使用适配器,会让

18、系统非常零乱,不易整体进行把握。比方,明明看到调用的是A接口,其实内部被适配成了B接口的实现,一个系统如果太多出现这种情况,class AdapterAngle : IDrawingpublic override void Draw()class Milk : Sauce无异于一场灾难。因此如果不是很有必要,可以不使用适配器,而是直接对系统进行重构。 由于JAVA至多继承一个类,所以至多只能适配一个适配者类,而且目标类必须是抽象类。实验六桥接模式的应用1实验目的1)掌握桥接模式(Bridge)的特点2)分析具体问题,使用桥接模式进行设计。2实验内容和要求一个 咖啡店 可以提 供大杯(Jorum

19、Coffee)、中 杯(MediumCoffee)、小杯(SmallCoffee)的咖啡(Coffee),为了满足不同用户的口味, 在咖啡中可以添加牛奶(Milk), 或者糖(Sugar),或者柠檬(Lemon),提供应用户不同口味的组合,如大 杯咖啡加牛奶,中杯咖啡加糖,小杯咖啡加柠檬,小杯咖啡加糖等。应用桥接模 式,用C#制台应用程序实现该设计。绘制该模式的UML图。UML图:源代码:abstract class Saucepublic abstract void Mixing();(public override void Mixing()(Console.WriteLine(加牛奶);

20、class Sugar : Saucepublic override void Mixing()(Console.WriteLine(加糖);class Lemon: Sauce(public override void Mixing()(Console.WriteLine(加柠檬);)abstract class Coffee(protected Sauce sauce;this .sauce = sauce;)public abstract void Mixing();=class JorumCoffee : Coffee(public override void Mixing()clas

21、s MediumCoffee : Coffee(public override void Mixing()(Console.Write(中杯咖啡);sauce.Mixing();)class SmallCoffee : Coffee(public override void Mixing()(Console.Write(小杯咖啡);sauce.Mixing();class Program(static void Main( string args)(_/中杯咖啡加牛奶Coffee coffeeOne =new MediumCoffee ();coffeeOne.AddSauce(new Mil

22、k ();coffeeOne.Mixing();/大杯咖啡加糖Coffee coffeeTwo = new JorumCoffee ();coffeeTwo.AddSauce( new Sugar();coffeeTwo.Mixing();小杯咖啡加糖Coffee coffeeThree = new SmallCoffee ();coffeeThree.AddSauce(coffeeThree.Mixing();Console.ReadKey();运行结果:实验小结:Bridge模式是一个非常有用的模式,也非常复杂,它很好的符合了开放-封闭原那么和优先使用对象,而不是继承这两个面向对象原那么。

23、 该模式使用 对象间的组合关系解耦了抽象和实 现之间固有的绑定关系,使得抽象和实现可以沿着各自的维度来变化。new Lemon();fil e:/C:/Users/LvYong/Des kto p/软件.nu n n _ - _ .HL实验七装饰模式的应用1实验目的1)掌握装饰模式(Decorator)的特点2)分析具体问题,使用装饰模式进行设计2实验内容和要求喜羊羊逃命游戏:喜羊羊被灰太狼追,喜羊羊最多5条命,灰太狼每咬到 喜羊羊一次,喜羊羊就要少一条命。在逃的过程中喜羊羊可以吃到三种苹果, 吃 红苹果可以给喜羊羊加上保护罩,吃 绿苹果可以加快喜羊羊奔跑速度,吃黄 苹果可以使喜羊羊趟着水跑。

24、应用装饰模式,用C#空制台应用程序实现该设计。 绘制该模式的UML图。UML图:源代码:abstract class State(public abstract void Show();)class Animal : State(private string name;public Animal( string name)(this .name = name;)public override void Show()(Console.WriteLine(的0 , name);)abstract class Apple : State Jprotected State component;publ

25、ic void Decorator( State component) Jthisponent = component;public override void Show()if (component != null )component.Show();class ProtectiveCover : Applepublic override void Show()/base.Show();Console.Write(有保护罩); base.Show();class RunFast : Applepublic override void Show()/base.Show();Console.Wr

26、ite(跑得快、); base.Show();class FlowingWater : Apple(public override void Show()(/base.Show();Console.Write(会趟水、);base.Show();class Program(static void Main( string args)(Animal pleasantsheep = new Animal (喜羊羊); ProtectiveCover pc = new ProtectiveCover (); RunFast rf= new RunFast();FlowingWater fw = ne

27、w FlowingWater ();pc.Decorator(pleasantsheep);rf.Decorator(pc);fw.Decorator(rf);fw.Show();Console.ReadKey();运行结果: file:/C:/ U se rs/LvY o ng/Des kto牛设. 一会逝水、跑得快、有保护罩的喜羊羊一实验小结:Decorator模式采用对象组合而非继承的手法,实现了在运行时动态的扩展对象功能的能力,而且可以根据需要扩展多个功能,防止了单独使用继承带来的灵活性差和 多子类衍生问题。同时它很好地符合面向对象设计原那么中优先使用对象组合而非继承 和 开放-封闭原

28、那么。实验八外观模式的应用1实验目的1掌握外观模式Facade的特点2分析具体问题,使用外观模式进行设计。2实验内容和要求一个保安系统的,由录像机、电灯、红外线监控和警报器组成。保安系统的 操作人员需要经常将这些仪器启动和关闭。 保安类需要用到所有的录像机Camera卜电灯Light、感应器Sensor河警报器Alarm对象,保安觉得使用不 方便。应用外观模式,用C#控制台应用程序改良该设计。绘制该模式的UML图。UML图:源代码:public class Camerapublic void TurnOn() Console.WriteLine( Turning on the camera.)

29、;public void TurnOff()Console.WriteLine( Turning off the camera.);)public void Rotate( int degrees)Console.WriteLine( Rotating the camera by 0 degrees.public class Lightpublic void TurnOff()Console.WriteLine( Turning on the light.);public void TurnOn()Console.WriteLine( Turning off the light.);publi

30、c void ChangeBulb()Console.WriteLine( changing the light-bulb. );public class Sensor public void Activate()Console.WriteLine( Activating the sensor.);public void Deactivate()Console.WriteLine( Deactivating the sensor.);public void Trigger()Console.WriteLine( The sensor has triggered. );( Console.Wri

31、teLine( Activating the alarm.);,degrees);public class Alarm public void Activate()Console.WriteLine( Deactivating the alarm.);public void Ring()(Console.WriteLine( Ringing the alarm.);public void StopRing()(Console.WriteLine( Stop the alarm.);public class SecurityFacade(privatestaticCameracamera1,ca

32、mera2;privatestaticLight light1, light2,light3;privatestaticSensor sensor;privatestaticAlarm alarm;static SecurityFacade()(camera1 =new Camerc();camera2 =new Camerc();light1 =newLight();light2 =newLight();light3 =newLight();sensor =newSensor();alarm = new Alarm();public void Activate()(camera1.TurnO

33、n();camera2.TurnOn();light1.TurnOn();light2.TurnOn();light3.TurnOn();sensor.Activate();alarm.Activate();public void Deactivate()camera1.TurnOff();camera2.TurnOff();light1.TurnOff();light2.TurnOff();light3.TurnOff();sensor.Deactivate();alarm.Deactivate();class Program static void Main( string args) S

34、ecurityFacade security;security= newSecurityFacade ();_security.Activate();Console.WriteLine( n- n);security.Deactivate();Console.ReadKey();运行结果: file/C:/User&/LvYong/Desktop/K(l:tt1S.一 口 . Turrw in j?orw?the?care ra.AT Ltin in3?on? tli&?c*ne ra.Turn?the? Llgflit -Tur insf?of f ?ther?li8fht.

35、Act ruat ing(? tli&?ser*soi*_A&t at土the?alai*n -Turn lnsi?ofTujrilnsf?ofLf1?th&?caner,.in9r?pn?the?Ligrht.Turning?on?the?light.TtiPft in(i?on?chB?li9ih(;.Deact ivatingrTths?&ensoiwDe act; iwatingr?thc?alaim*搜狗轮音输X法4 =J H实验小结:Fa?ade模式注重的是简化接口,它更多的时候是从架构的层次去看整个系统,而并非单个类的层次。该模式对客户屏蔽了子系统

36、组件,因而减少了客户处理的对象的数目并使得子系统使用起来更加方便。 实现了子系统与客户之间的松耦合关系,而子系统内部的功能组件往往是紧耦合的。松耦合关系使得子系统的组件变化不会影响到它的客户。实验九观察者模式的应用1实验目的1掌握外观模式Observe。的特点2分析具体问题,使用外观模式进行设计。public class Product2实验内容和要求网上商店中如果商品product:在名称name、价格price等方面有变 化,系统能自动通知会员,将是网上商店区别传统商店的一大特色。如何设计实现?说明你所选择的设计模式,画出类关系图并指明各个类的角色。应用外观 模式,用C#制台应用程序改良该

37、设计。绘制该模式的UML图。UMLB:源代码:(public string name;public string price;public Product( string s_name, string s_price)(name = s_name;price = s_price;public Product()(-_name = null ;price =null ;class ShopSystem(private IList observers = new List ();public IList products = new List ();public ShopSystem( IList

38、 pro)(products = pro;private string action;public void Attach( MemberObserver observer)(observers.Add(observer);public void Detach( MemberObserver observer)(observers.Remove(observer);public void Notify()(foreach ( MemberObserver mo in observers)mo.Update();public string ProductAction(get(action =nu

39、ll ;foreach ( Product p in products)(if ( != null | p.price != null )( action += +) return action;) set( action =value ;)class MemberObserver(private string name; private ShopSystem sub;public MemberObserver( string name, ShopSystem sub) (this .name = name;this .sub = sub;)public void U

40、pdate()(_Console.WriteLine( 0请注意!1 , sub.ProductAction, name);)class Programstatic void Main( string args)Product productOne = new Product ();Product productTwo = new Product (衬衫,125元/件);Product productThree = new Product (短袖,60元/件);IList products = new List ();products.Add(productOne);products.Add(productTwo);products.Add(productThree);ShopSystem shopsystem = new ShopSystem(products);MemberObserver member1 = new MemberObserver(会员1, shopsystem);MemberObserver member2 = new MemberObserver会员2, shopsystem);shopsystem.Attach(member1);

温馨提示

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

评论

0/150

提交评论