设计模式十七.docx
- 文档编号:10886313
- 上传时间:2023-05-28
- 格式:DOCX
- 页数:16
- 大小:17.80KB
设计模式十七.docx
《设计模式十七.docx》由会员分享,可在线阅读,更多相关《设计模式十七.docx(16页珍藏版)》请在冰点文库上搜索。
设计模式十七
一.实验目的
1.熟悉UML统一建模语言;
2.回顾熟悉迭代器模式、中介者模式、备忘录模式;
3.熟悉XML文件的操作;
4.熟悉java的反射机制。
二.实验内容
(1)某教务管理系统中一个班级(Class)包含多个学生(Student),使用Java内置迭代器实现对学生信息的遍历,要求按学生年龄由大到小的次序输出学生信息。
用Java实现该过程。
(2)使用中介者模式来说明联合国的作用,要求绘制相应的类图并分析每个类的作用(注:
可以将联合国定义为抽象中介者类,联合国下属机构如WTO、WFC、WHO等作为具体中介者类,国家可以作为抽象同事类,而将中国、美国、日本、英国等国家作为具体同事类)。
(3)改进“用户信息操作撤销”实例,使得系统可以实现多次撤销操作(可以使用集合对象如HashMap、ArrayList等来实现)。
三.实验环境
PC微机;
Windows操作系统;
VisualStudio程序集成环境。
4.实验内容
(1)某教务管理系统中一个班级(Class)包含多个学生(Student),使用Java内置迭代器实现对学生信息的遍历,要求按学生年龄由大到小的次序输出学生信息。
用Java实现该过程。
Student.java
package设计模式实验十七周_1;
publicclassStudentimplementsComparable
privateStringno;
privateStringname;
privateintage;
privateStringzy;
publicStudent(Stringno,Stringname,intage,Stringzy){
super();
this.no=no;
this.name=name;
this.age=age;
this.zy=zy;
}
//三个返回结果都要写出来
publicintcompareTo(Studento){
if(this.age>o.age){
return-1;
}elseif(this.age return1; }else{ return0; } } @Override publicStringtoString(){ return"姓名: "+this.name+".编号: "+this.no+".年龄: "+this.age +".专业: "+this.zy; } } Client.java package设计模式实验十七周_1; import import import publicclassClient{ publicstaticvoidmain(String[]args){ Students1=newStudent("291","张一",20,"音乐专业"); Students2=newStudent("423","李红",21,"计算机专业"); Students3=newStudent("211","王文",22,"机械专业"); Students4=newStudent("445","高龙",19,"国贸专业"); List list.add(s1); list.add(s2); list.add(s3); list.add(s4); Collections.sort(list); System.out.println("按照年龄进行排序输出: "); for(Studentstu: list){ System.out.println(stu.toString()); } } } UML.java 运行结果: (2)使用中介者模式来说明联合国的作用,要求绘制相应的类图并分析每个类的作用(注: 可以将联合国定义为抽象中介者类,联合国下属机构如WTO、WFC、WHO等作为具体中介者类,国家可以作为抽象同事类,而将中国、美国、日本、英国等国家作为具体同事类)。 UN.java package设计模式实验十七周_2; import publicabstractclassUN{ protectedStringname; protectedHashtable publicStringgetName(){ returnname; } publicvoidsetName(Stringname){ this.name=name; } publicUN(){ this.country=newHashtable } publicvoidAddCountry(Countryco){ if(country==null) return; country.put(co.getName(),co); } publicvoidDelCountry(Stringco){ if(country==null) return; country.remove(co); } publicvoidDelCountry(Countryco){ if(country==null) return; country.remove(co.getName()); } protectedvoidSendMessage(Stringfrom,Stringto,Stringmsg){ Countryco=country.get(to); if(co! =null) co.ReceiveMessage(from,msg); else System.out.println("对不起! “"+from+"”不存在,可能还未加入UN! "); } publicvoidReceiveMessage(Stringfrom,Stringto,Stringmsg){ SendMessage(from,to,msg); } } Country.java package设计模式实验十七周_2; publicabstractclassCountry{ protectedStringname; protectedUNwto,who,wfc; publicUNgetWto(){ returnwto; } publicvoidsetWto(UNwto){ this.wto=wto; } publicUNgetWho(){ returnwho; } publicvoidsetWho(UNwho){ this.who=who; } publicUNgetWfc(){ returnwfc; } publicvoidsetWfc(UNwfc){ this.wfc=wfc; } publicStringgetName(){ returnname; } publicvoidsetName(Stringname){ this.name=name; } publicabstractvoidSendMessageByWTO(Stringcou,Stringmsg); publicvoidSendMessageByWHO(Stringcou,Stringmsg){ who.SendMessage(this.name,cou,msg); } publicvoidSendMessageByWFC(Stringcou,Stringmsg){ wfc.SendMessage(this.name,cou,msg); } publicvoidReceiveMessage(Stringcou,Stringmsg){ System.out.println(name+"收到来自"+cou+"的消息: “"+msg+"”"); } @Override publicbooleanequals(Objectco){ Countryc=(Country)co; if(co==null||this.name==null||c.getName()==null) returnfalse; returnname.equals(c.getName()); } } WHO.java package设计模式实验十七周_2; publicclassWHOextendsUN{ publicWHO() { super(); this.name=newString("WHO"); } } WFC.java package设计模式实验十七周_2; publicclassWFCextendsUN{ publicWFC(){ super(); this.name=newString("WFC"); } } WTO.java package设计模式实验十七周_2; publicclassWTOextendsUN{ publicWTO(){ super(); this.name=newString("WTO"); } } America.java package设计模式实验十七周_2; publicclassAmericaextendsCountry{ publicAmerica() {this.name=newString("America");} @Override publicvoidSendMessageByWTO(Stringcou,Stringmsg){ wto.SendMessage(this.name,cou,msg); } } China.java package设计模式实验十七周_2; publicclassChinaextendsCountry{ publicChina() {this.name=newString("China");} @Override publicvoidSendMessageByWTO(Stringcou,Stringmsg){ wto.SendMessage(this.name,cou,msg); } } Japan.java package设计模式实验十七周_2; publicclassJapanextendsCountry{ publicJapan() {this.name=newString("Japan");} @Override publicvoidSendMessageByWTO(Stringcou,Stringmsg){ wto.SendMessage(this.name,cou,msg); } } Client.java package设计模式实验十七周_2; publicclassClient{ publicstaticvoidmain(String[]args){ UN[]un=newUN[3]; //UNwto,who,wfc; un[0]=newWTO(); un[1]=newWHO(); un[2]=newWFC(); Country[]cou=newCountry[3]; cou[0]=newChina(); cou[1]=newJapan(); cou[2]=newAmerica(); for(inti=0;i for(intj=0;j un[i].AddCountry(cou[j]); for(inti=0;i { cou[i].setWfc(un[2]); cou[i].setWho(un[1]); cou[i].setWto(un[0]); } cou[0].SendMessageByWTO("America","中方坚决反对美方干涉台湾问题"); cou[1].SendMessageByWHO("China","通过WHO...."); cou[2].SendMessageByWFC("China","通过WFC...."); } } UML.java 运行结果: (3)改进“用户信息操作撤销”实例,使得系统可以实现多次撤销操作(可以使用集合对象如HashMap、ArrayList等来实现)。 UserInfoDTO.java package设计模式实验十七周_3; publicclassUserInfoDTO { privateStringaccount; privateStringpassword; privateStringtelNo; publicStringgetAccount() { returnaccount; } publicvoidsetAccount(Stringaccount) { this.account=account; } publicStringgetPassword() { returnpassword; } publicvoidsetPassword(Stringpassword) { this.password=password; } publicStringgetTelNo() { returntelNo; } publicvoidsetTelNo(StringtelNo) { this.telNo=telNo; } publicMementosaveMemento() { returnnewMemento(account,password,telNo); } publicvoidrestoreMemento(Mementomemento) { this.account=memento.getAccount(); this.password=memento.getPassword(); this.telNo=memento.getTelNo(); } publicvoidshow() { System.out.println("Account: "+this.account); System.out.println("Password: "+this.password); System.out.println("TelNo: "+this.telNo); } } Caretaker.java package设计模式实验十七周_3; publicclassCaretaker { privateMementomemento; publicMementogetMemento() { returnmemento; } publicvoidsetMemento(Mementomemento) { this.memento=memento; } } Memento.java package设计模式实验十七周_3; classMemento { privateStringaccount; privateStringpassword; privateStringtelNo; publicMemento(Stringaccount,Stringpassword,StringtelNo) { this.account=account; this.password=password; this.telNo=telNo; } publicStringgetAccount() { returnaccount; } publicvoidsetAccount(Stringaccount) { this.account=account; } publicStringgetPassword() { returnpassword; } publicvoidsetPassword(Stringpassword) { this.password=password; } publicStringgetTelNo() { returntelNo; } publicvoidsetTelNo(StringtelNo) { this.telNo=telNo; } } Client.java package设计模式实验十七周_3; import设计模式实验十七周_3.UserInfoDTO; import设计模式实验十七周_3.Caretaker; publicclassClient { publicstaticvoidmain(Stringa[]) { UserInfoDTOuser=newUserInfoDTO(); Caretakerc=newCaretaker(); Caretakerd=newCaretaker(); user.setAccount("zhangsan"); user.setPassword("123456"); user.setTelNo(); System.out.println("状态一: "); user.show(); c.setMemento(user.saveMemento());//保存备忘录 System.out.println("---------------------------"); user.setPassword("111111"); user.setTelNo(); System.out.println("状态二: "); user.show(); d.setMemento(user.saveMemento());//保存备忘录 System.out.println("---------------------------"); user.setPassword("222222"); user.setTelNo(); System.out.println("状态三: "); user.show(); System.out.println("---------------------------"); user.restoreMemento(d.getMemento());//从备忘录中恢复 System.out.println("回到状态二: "); user.show(); System.out.println("---------------------------"); user.restoreMemento(c.getMemento());//从备忘录中恢复 System.out.println("回到状态一: "); user.show(); System.out.println("---------------------------"); } } UML.java 运行结果:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 设计 模式 十七