设计模式大题.docx

上传人:b****3 文档编号:4807524 上传时间:2023-05-07 格式:DOCX 页数:23 大小:93.56KB
下载 相关 举报
设计模式大题.docx_第1页
第1页 / 共23页
设计模式大题.docx_第2页
第2页 / 共23页
设计模式大题.docx_第3页
第3页 / 共23页
设计模式大题.docx_第4页
第4页 / 共23页
设计模式大题.docx_第5页
第5页 / 共23页
设计模式大题.docx_第6页
第6页 / 共23页
设计模式大题.docx_第7页
第7页 / 共23页
设计模式大题.docx_第8页
第8页 / 共23页
设计模式大题.docx_第9页
第9页 / 共23页
设计模式大题.docx_第10页
第10页 / 共23页
设计模式大题.docx_第11页
第11页 / 共23页
设计模式大题.docx_第12页
第12页 / 共23页
设计模式大题.docx_第13页
第13页 / 共23页
设计模式大题.docx_第14页
第14页 / 共23页
设计模式大题.docx_第15页
第15页 / 共23页
设计模式大题.docx_第16页
第16页 / 共23页
设计模式大题.docx_第17页
第17页 / 共23页
设计模式大题.docx_第18页
第18页 / 共23页
设计模式大题.docx_第19页
第19页 / 共23页
设计模式大题.docx_第20页
第20页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

设计模式大题.docx

《设计模式大题.docx》由会员分享,可在线阅读,更多相关《设计模式大题.docx(23页珍藏版)》请在冰点文库上搜索。

设计模式大题.docx

设计模式大题

5.2.某电影院售票系统为不同类型的用户提供了不同的电影票(CinemaTicket)打折方式(Discount),学生凭学生证可享受8折优惠(StudentDiscount),儿童可享受减免10元的优惠(ChildrenDiscount),VIP用户除享受半价优惠外还可以进行积分(VIPDiscount)。

选择一种合适的设计模式来设计该系统。

(策略模式)

//电影票类:

环境类

classMovieTicket

{

privatedoubleprice;

privateDiscountdiscount;

publicvoidsetPrice(doubleprice)

{

this.price=price;

}

publicvoidsetDiscount(Discountdiscount)

{

this.discount=discount;

}

publicdoublegetPrice()

{

returndiscount.calculate(this.price);

}

}

//折扣类:

抽象策略类

interfaceDiscount

{

publicdoublecalculate(doubleprice);

}

//学生折扣类:

具体策略类

classStudentDiscountimplementsDiscount

{

publicdoublecalculate(doubleprice)

{

returnprice*0.8;

}

}

//儿童折扣类:

具体策略类

classChildrenDiscountimplementsDiscount

{

publicdoublecalculate(doubleprice)

{

returnprice-10;

}

}

//VIP会员折扣类:

具体策略类

classVIPDiscountimplementsDiscount

{

publicdoublecalculate(doubleprice)

{

System.out.println("增加积分!

");

returnprice*0.5;

}

}

//客户端测试类

classClient

{

publicstaticvoidmain(Stringargs[])

{

MovieTicketmt=newMovieTicket();

mt.setPrice(50.00);

doublecurrentPrice;

Discountobj;

obj=newStudentDiscount();//可通过配置文件实现

mt.setDiscount(obj);

currentPrice=mt.getPrice();

System.out.println("折后价为:

"+currentPrice);

System.out.println("---------------------------------");

obj=newVIPDiscount();

mt.setDiscount(obj);

currentPrice=mt.getPrice();

System.out.println("折后价为:

"+currentPrice);

}

}

publicinterfaceCount{

publicabstractvoiddiscount(doublea);

}

publicclassCiTicket{

privateCountdisobj;

publicvoiddiscount(doublea){

disobj.discount(a);

}

publicvoidsetdisobj(Countdisobj){

this.disobj=disobj;

}

}

publicclassStTicketimplementsCount{

privatedoublea;

publicvoiddiscount(doublea){

System.out.println("原价为"+a);

this.a=a*0.8;

System.out.println("学生票的票价为原价的8折:

"+this.a);

}

}

publicclassVTicketimplementsCount{

privatedoublea;

publicvoiddiscount(doublea){

System.out.println("原价为"+a);

this.a=a*0.5;

System.out.println("VIP会员的票价为原价的半价:

"+this.a);

System.out.println("VIP会员的会员卡积分一次");

}

}

publicclassChTicketimplementsCount{

privatedoublea;

publicvoiddiscount(doublea){

System.out.println("原价为"+a);

this.a=a-10;

System.out.println("儿童票的票价为原价减10元:

"+this.a);

}

}

publicclassClient{

publicstaticvoidmain(String[]args){

CiTicketc=newCiTicket();

Countd=newStTicket();

Countd1=newChTicket();

Countd2=newVTicket();

d.discount(50);

d1.discount(50);

d2.discount(50);

c.setdisobj(d);

c.setdisobj(d1);

c.setdisobj(d2);

}

}

1.使用简单工厂模式模拟女娲(Nvwa)造人(Person),如果传入参数M,则返回一个Man对象,如果传入参数W,则返回一个Woman对象,请用面向对象的语言实现该场景。

现需要增加一个新的Robot类,如果传入参数R,则返回一个Robot对象,对代码进行修改并注意女娲的变化。

importjavax.swing.JOptionPane;

/**

*主要显示类

*@author陈俊生

*

*/

publicclassMain{

/**

*主方法

*@paramarg

*/

publicstaticvoidmain(Stringarg[]){

/*

*提示输入

*/

/*System.out.println("请大家输入你想让女娲造的人的代号:

");*/

Stringstr="";

/*

*当输入0时退出程序

*/

while(true){

str=JOptionPane.showInputDialog("请大家输入你想让女娲造的人的代号:

");

NvWanvWa=newNvWa();

Personperson=nvWa.madeMan(str);

person.play();

}

}

}

/**

*男人类

*@author陈俊生

*

*/

classManextendsPerson{

@Override

publicvoidplay(){

//TODOAuto-generatedmethodstub

/*System.out.println("大家好,我是男人!

我来自地球!

");*/

JOptionPane.showMessageDialog(null,"大家好,我是男人!

我来自地球!

");

}

}

/**

*女娲类

*简单工厂类

*@author陈俊生

*

*/

classNvWa{

/**

*女娲造人方法

*@paramstr根据传递的参数进行造人

*@return

*/

publicPersonmadeMan(Stringstr){

Personperson=null;

switch(str){

/*

*实例化男人

*/

case"M":

person=newMan();

break;

/*

*实例化男人

*/

case"W":

person=newWoman();

break;

/*

*实例化机器人

*/

case"R":

person=newRobot();

break;

default:

/*System.out.println("输入有误,女娲没这个能力造出你需要的人!

");*/

person=newPerson();

break;

}

returnperson;

}

}

/**

*人类

*@author陈俊生

*

*/

classPerson{

/*privateStringname;//姓名

privateintage;//年龄

*/

/**

*玩的方法

*/

publicvoidplay(){

JOptionPane.showMessageDialog(null,"输入有误,我还是一坨泥巴!

女娲还没构造我!

请重试~");

};

}

/**

*机器人类

*@author陈俊生

*

*/

classRobotextendsPerson{

@Override

publicvoidplay(){

//TODOAuto-generatedmethodstub

/*System.out.println("大家好,我是机器人!

我来自火星!

");*/

JOptionPane.showMessageDialog(null,"大家好,我是机器人!

我来自火星!

");

}

}

/**

*女人类

*@author陈俊生

*

*/

classWomanextendsPerson{

@Override

publicvoidplay(){

//TODOAuto-generatedmethodstub

/*System.out.println("大家好,我是女人!

我来自水星!

");*/

JOptionPane.showMessageDialog(null,"大家好,我是女人!

我来自水星!

");

}

}

2.迟到的理由。

(简单工厂和工厂模式)

说明:

根据迟到的理由不同,如:

去厕所,在路上,回家等理由。

当老师需要知道是何种理由迟到时只需传入相应的参数,现请使用简单工厂模式来模拟该过程。

此外,如果有同学新增加一个“相亲”理由,为了遵循开闭原则,请使用工厂模式模拟上述过程。

简单工厂模式

importjavax.xml.parsers.*;

importorg.w3c.dom.*;

importjava.io.*;

publicclassXMLUtilReason{

//该方法用于从XML配置文件中提取品牌名称,并返回该品牌名称

publicstaticStringgetexcuse(){

try{

//创建文档对象

DocumentBuilderFactorydFactory=DocumentBuilderFactory.newInstance();

DocumentBuilderbuilder=dFactory.newDocumentBuilder();

Documentdoc;

doc=builder.parse(newFile("configReason.xml"));

//获取包含品牌名称的文本节点

NodeListnl=doc.getElementsByTagName("excuse");

NodeclassNode=nl.item(0).getFirstChild();

Stringexcuse=classNode.getNodeValue().trim();

returnexcuse;

}

catch(Exceptione){

e.printStackTrace();

returnnull;

}

}

}

publicabstractclassAbstractReason{

publicabstractvoidreason();

}

publicclassGoHomeextendsAbstractReason{

publicvoidreason(){

System.out.println("GoHome!

");

}

}

publicclassGoToiletextendsAbstractReason{

publicvoidreason(){

System.out.println("GotoToilet!

");

}

}

publicclassOnTheWayextendsAbstractReason{

publicvoidreason(){

System.out.println("OnTheWay!

");

}

}

publicclassReasonFactory{

publicstaticAbstractReasonproduceReason(Stringexcuse)throwsException

{

if(excuse.equalsIgnoreCase("Toilet")){

System.out.println("TheReasonFactoryproducesthereasonofToilet!

");

returnnewGoToilet();

}

elseif(excuse.equalsIgnoreCase("Home")){

System.out.println("TheReasonFactoryproducesthereasonofgohome");

returnnewGoHome();

}

elseif(excuse.equalsIgnoreCase("OnTheWay")){

System.out.println("TheReasonFactoryproducesthereasonofontheway!

");

returnnewOnTheWay();

}

else{

thrownewException("Sorry!

Thereasonisnottrue!

");

}

}

}

publicclassClient_xml{

publicstaticvoidmain(String[]args){

try{

AbstractReasonabstractreason;

Stringexcuse=XMLUtilReason.getexcuse();

abstractreason=ReasonFactory.produceReason(excuse);

//abstractreason=ReasonFactory.produceReason("Home");

abstractreason.reason();

}

catch(Exceptione)

{

System.out.println(e.getMessage());

}

}

}

publicclassClient{

publicstaticvoidmain(String[]args){

try{

AbstractReasonabstractreason;

abstractreason=ReasonFactory.produceReason("Toilet");

abstractreason.reason();

}

catch(Exceptione)

{

System.out.println(e.getMessage());

}

}

}

 

3.简历题目(浅克隆)

需要有一个简历类,必须要有姓名,可以设置性别和年龄,可以设置工作经历。

最终需要三份简历。

publicclassResumeimplementsCloneable

{

privateStringname;

privateStringsex;

privateStringage;

privateWorkExperienceworkexperience=null;

publicResume(Stringname)

{

this.name=name;

this.workexperience=newWorkExperience();

}

publicvoidsetName(Stringname)

{

this.name=name;

}

publicvoidsetPersonalInfo(Stringsex,Stringage)

{

this.sex=sex;

this.age=age;

}

publicStringgetName()

{

return(this.name);

}

publicStringgetSex()

{

return(this.sex);

}

publicStringgetAge()

{

return(this.age);

}

publicvoidsetWorkExperience(StringworkDate,StringCompany)

{

workexperience.setworkDate(workDate);

workexperience.setCompany(Company);

}

publicWorkExperiencegetWorkExperience()

{

returnthis.workexperience;

}

publicObjectclone()

{

Resumeclone=null;

try

{

clone=(Resume)super.clone();

}

catch(CloneNotSupportedExceptione)

{

System.out.println("Clonefailure!

");

}

returnclone;

}

publicvoiddisplay()

{

System.out.println("Resume:

"+""+this.getName()+""+this.getAge()+""+this.getSex());

System.out.println("Experience:

"+""+workexperience.getworkDate()+""+workexperience.getCompany());

}

}

publicclassWorkExperience{

privateStringworkDate;

privateStringCompany;

publicvoidsetworkDate(StringworkDate)

{

this.workDate=workDate;

}

publicvoidsetCompany(StringCompany)

{

this.Company=Company;

}

publicStringgetworkDate()

{

return(this.workDate);

}

publicStringgetCompany()

{

return(this.Company);

}

}

publicclassClient{

publicstaticvoidmain(Stringargs[]){

Resumeresume,copy1,copy2;

resume=newResume("zhangsan");

resume.setPersonalInfo("male","25");

resume.setWorkExperience("1995-1997","Company1");

copy1=(Resume)resume.clone();

copy2=(Resume)resume.clone();

resume.display();

copy1.setName("lisi");

copy1.setWorkExperience("2004-2007","Company2");

copy1.display();

copy2.setPersonalInfo("female","30");

copy2.display();

System.out.println(resume==copy1);

System.out.println(copy1==copy2);

System.out.println(resume.getWorkExperience()==copy1.getWorkExperience());

System.out.println(copy1.getWorkExperience()==copy2.getWorkExperience());

}

}

陈俊生版

publicclassResumeimplementsCloneable{

privateStringname;//姓名

privateStringse

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2