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,"国贸专业");
Listlist=newArrayList();
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;
protectedHashtablecountry;
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;ifor(intj=0;jun[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
运行结果: