您好,欢迎访问三七文档
当前位置:首页 > 财经/贸易 > 资产评估/会计 > 吴东洋第一次试验报告
信息工程学院试验报告课程名称:软件设计与体系结构实验名称:设计模式应用实验类型:验证性□综合性□设计性√实验室名称:信息工程学院九楼机房班级:软件13-2学号:201320205059姓名:吴东洋成绩:实验日期:2016年6月4日内蒙古工业大学信息工程学院第页报告类型:实验报告√预习报告□一、实验名称设计模式应用二、实验目的1、学习使用UML和面向对象编程语言设计与实现代理模式、迭代器模式等。2、理解每一种设计模式的设计动机,掌握模式结构。3、学习如何使用面向对象语言实现这些模式,并分析其运行结果。三、实验内容使用UML和面向对象编程语言设计与实现代理模式、迭代器模式等,包括根据实例绘制模式类图、编写模式实例实现代码,运行并测试模式实例代码。四、实验环境实验地点:格物楼B402软件环境:Myeclipse10操作系统:windows7/8五、实验要求1.使用UML正确绘制代理模式、迭代器模式等实例的类图2.使用面向对象语言实现代理模式、迭代器模式等实例,代码运行正确无误。3.实验前写好预习报告,做完实验后写出实验报告六.实验步骤1、理解代理模式、迭代器模式含义2、利用建模工具Rose等,使用UML绘制代理模式、迭代器模式的类图3、使用面向对象语言实现代理模式、迭代器模式4、运行并测试模式实例代码,观察、分析实验结果七、实验原理1、代理模式:给某个对象提供一个代理对象,并由代理对象控制对于原对象的访问,即客户不直接操控原对象,而是通过代理对象间接地操控原对象。2、迭代器模式:提供一种方法顺序地访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。内蒙古工业大学信息工程学院第页八、方案设计1、代理模式:代理模式的角色分四种:主题接口:即代理类的所实现的行为接口。目标对象:也就是被代理的对象。代理对象:用来封装真是主题类的代理类。客户端2、迭代器模式:1.抽取对象:聚合对象,这里是公交车,是一个具体的,当然集合对象不限于公交车,所以可以抽取一个抽象类:聚合抽象类:Aggragate具体聚合类:Bus聚合对象中的乘客:Passenger迭代器对象:在这个需求中,迭代器是售票员,同样也抽取一个抽象的迭代器,因为迭代器的迭代顺序可以不一致:抽象迭代器:Iterator具体的迭代器:Conductor2.类的职责:Aggregate提供一个创建迭代器的行为,在Bus中有Passenger,所以要提供当前乘客的数量的行为,还有上下车的行为,即加或减乘客Aggregate:iterator();Bus:removePassenger();addPassenger();count();getPassenger(intindex);Iterator:既然是迭代器,就会提供如下行为:first();next();hasNext();current();3.类的交互:在具体的聚合类Bus中显然装的是乘客,然而迭代器要迭代聚合对象的元素,即必须依赖了聚合对象。内蒙古工业大学信息工程学院第页九、程序类图与试验代码1、代理模式:packagecom;//定义一个主题接口publicinterfaceSubject{publicvoidHello();publicvoidGoodBye();}packagecom;//定义一个目标类,并实现主题接口publicclassRealSubjectimplementsSubject{publicvoidHello(){System.out.println(你好);}内蒙古工业大学信息工程学院第页publicvoidGoodBye(){System.out.println(再见);}}packagecom;//定义一个代理类,来代理目标对象publicclassStaticProxyimplementsSubject{privateRealSubjectrealSubject=null;publicStaticProxy(){}publicvoidHello(){if(realSubject==null){realSubject=newRealSubject();}realSubject.Hello();}publicvoidGoodBye(){if(realSubject==null){realSubject=newRealSubject();}realSubject.GoodBye();}}packagecom;//定义一个客户端publicclassClient{publicstaticvoidmain(String[]args){StaticProxysp=newStaticProxy();sp.Hello();sp.GoodBye();}}内蒙古工业大学信息工程学院第页2、迭代器模式:packagecom01;publicabstractclassIterator{publicabstractObjectfirst();publicabstractObjectnext();publicabstractbooleanhasNext();publicabstractObjectcurrent();}packagecom01;publicabstractclassAggregate{publicabstractIteratoriterator();}packagecom01;importjava.util.ArrayList;importjava.util.List;publicclassBusextendsAggregate{内蒙古工业大学信息工程学院第页privateListPassengerpassengers=newArrayListPassenger();publicvoidaddPassenger(Passengerpassenger){passengers.add(passenger);}publicvoidremovePassenger(){passengers.remove(0);}publicintcount(){returnpassengers.size();}publicPassengergetPassenger(intindex){returnpassengers.get(index);}@OverridepublicIteratoriterator(){returnnewConductor(this);}}packagecom01;publicclassConductorextendsIterator{privateBusbus;//具体的聚合对象privateintcurrent;//记录当前位置publicConductor(Busbus){this.bus=bus;}@OverridepublicObjectfirst(){returnbus.getPassenger(0);}@OverridepublicObjectnext(){if(current=bus.count()){returnnull;}内蒙古工业大学信息工程学院第页returnbus.getPassenger(current++);}@OverridepublicbooleanhasNext(){returncurrentbus.count()?true:false;}@OverridepublicObjectcurrent(){returnbus.getPassenger(current);}}packagecom01;publicclassClient{publicstaticvoidmain(String[]args){Passengerp1=newPassenger(司奥);Passengerp2=newPassenger(里昂);Passengerp3=newPassenger(小王);Passengerp4=newPassenger(四哥);Passengerp5=newPassenger(小李);//来了一辆公交车Busbus=newBus();bus.addPassenger(p1);bus.addPassenger(p2);bus.addPassenger(p3);bus.addPassenger(p4);bus.addPassenger(p5);//公交车的售票员出马了Iteratorit=bus.iterator();while(it.hasNext()){Stringname=((Passenger)it.next()).getName();System.out.println(售票员:+name+,请买票!);System.out.println(name+:下车);System.out.println(售票员:请投币);}}}内蒙古工业大学信息工程学院第页十.实验结果十一.试验心得通过这次试验我学到了很多,掌握了很多。懂得了代理模式是给某个对象提供一个代理对象,并由代理对象控制对于原对象的访问,即客户不直接操控原对象,而是通过代理对象间接地操控原对象。迭代器模式是提供一种方法顺序地访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。这些对以后内蒙古工业大学信息工程学院第页的编程有很大的帮助。
本文标题:吴东洋第一次试验报告
链接地址:https://www.777doc.com/doc-2579896 .html