装饰者模式肖正文.docx

上传人:b****1 文档编号:15150173 上传时间:2023-07-01 格式:DOCX 页数:12 大小:93.81KB
下载 相关 举报
装饰者模式肖正文.docx_第1页
第1页 / 共12页
装饰者模式肖正文.docx_第2页
第2页 / 共12页
装饰者模式肖正文.docx_第3页
第3页 / 共12页
装饰者模式肖正文.docx_第4页
第4页 / 共12页
装饰者模式肖正文.docx_第5页
第5页 / 共12页
装饰者模式肖正文.docx_第6页
第6页 / 共12页
装饰者模式肖正文.docx_第7页
第7页 / 共12页
装饰者模式肖正文.docx_第8页
第8页 / 共12页
装饰者模式肖正文.docx_第9页
第9页 / 共12页
装饰者模式肖正文.docx_第10页
第10页 / 共12页
装饰者模式肖正文.docx_第11页
第11页 / 共12页
装饰者模式肖正文.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

装饰者模式肖正文.docx

《装饰者模式肖正文.docx》由会员分享,可在线阅读,更多相关《装饰者模式肖正文.docx(12页珍藏版)》请在冰点文库上搜索。

装饰者模式肖正文.docx

装饰者模式肖正文

云南大学软件学院

实验报告

序号:

姓名:

肖正文学号:

20121120141专业:

软件工程日期:

2014/12/10成绩:

实验二装饰者模式的运用

一、实验目的:

装饰者模式动态地将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案。

在熟悉装饰者模式相关理论知识的基础上,使用装设者模式实现米线店结账小程序。

二、实验要求:

使用装饰者模式实现米线店结账程序,要求如下:

1.米线有三种,干浆、酸浆和水米线。

2.配料有三种,豆腐、鸡蛋、牛肉,今后还会更多。

3.客户可疑随心所欲的要各种米线搭配各种配料,配料可以加同一种加多份,或者不同种加多份。

1、设计并绘制该程序的类图;

2、依照设计的类图使用Java语言编写代码,并实现该程序;

3、除了核心的模式相关类实现外,提供测试环境,按照难度高低,分别是:

a)控制台程序,Client硬编码初始化模式和测试环境,运行结果文本输出;

b)控制台程序,Client初始化测试环境,并根据用户输入运算,运行结果文本输出;

c)设计并实现用户UI,Client初始化测试环境,并根据用户在UI控件上的输入运算,运行结果文本输出;

三、实验内容:

1类图

2代码

主类:

米线类

packagexiao.it.noodle;

publicabstractclassNooldel{

privateStringdescription=null;

publicStringgetDescription(){

returndescription;

}

 

publicvoidsetDescription(Stringdescription){

this.description=description;

}

 

publicabstractdoublecost();

}

三种米线

packagexiao.it.cocretnoodle;

importxiao.it.noodle.Nooldel;

publicclassGnoodlesextendsNooldel{

publicGnoodles(){

Stringdescription="干浆米线";

setDescription(description);

}

@Override

publicdoublecost(){

//TODOAuto-generatedmethodstub

return1;

}

}

packagexiao.it.cocretnoodle;

importxiao.it.noodle.Nooldel;

publicclassSnoodleextendsNooldel{

publicSnoodle(){

Stringdescription="酸浆米线";

setDescription(description);

}

@Override

publicdoublecost(){

//TODOAuto-generatedmethodstub

return2;

}

}

packagexiao.it.cocretnoodle;

importxiao.it.noodle.Nooldel;

publicclassWNoodleextendsNooldel{

publicWNoodle(){

Stringdescription="水米线";

setDescription(description);

}

@Override

publicdoublecost(){

//TODOAuto-generatedmethodstub

return3;

}

}

装饰者接口

packagexiao.it.ConPDecorator;

/**

*抽象的装饰类

*/

importxiao.it.noodle.Nooldel;

publicabstractclassPeiliaoextendsNooldel{

publicabstractStringgetDescription();

@Override

publicdoublecost(){

//TODOAuto-generatedmethodstub

return0;

}

}

具体装饰:

packagexiao.it.ConSDecorator;

importxiao.it.ConPDecorator.Peiliao;

importxiao.it.noodle.Nooldel;

publicclassBeefextendsPeiliao{

privateNooldeln=null;

publicBeef(Nooldeln){

this.n=n;

}

@Override

publicStringgetDescription(){

Stringstr=n.getDescription();

if(str.indexOf("牛肉")!

=-1){

returnstr;

}else{

return"牛肉"+n.getDescription();

}

}

publicdoublecost(){

return5+n.cost();

}

}

packagexiao.it.ConSDecorator;

importxiao.it.ConPDecorator.Peiliao;

importxiao.it.noodle.Nooldel;

publicclassEggextendsPeiliao{

privateNooldeln=null;

publicEgg(Nooldeln){

this.n=n;

}

@Override

publicStringgetDescription(){

//TODOAuto-generatedmethodstub

Stringstr=n.getDescription();

if(str.indexOf("鸡蛋")!

=-1){

returnstr;

}else{

return"鸡蛋"+n.getDescription();

}

}

publicdoublecost(){

return2+n.cost();

}

}

packagexiao.it.ConSDecorator;

importxiao.it.ConPDecorator.Peiliao;

importxiao.it.noodle.Nooldel;

publicclassTofuextendsPeiliao{

privateNooldeln=null;

publicTofu(Nooldeln){

this.n=n;

}

@Override

publicStringgetDescription(){

//TODOAuto-generatedmethodstub

Stringstr=n.getDescription();

if(str.indexOf("豆腐")!

=-1){

returnstr;

}else{

return"豆腐"+n.getDescription();

}

}

publicdoublecost(){

returnn.cost()+1;

}

}

UI类:

packagexiao.it.UI;

importjava.awt.Dimension;

importjava.awt.event.ActionEvent;

importjava.awt.event.ActionListener;

importjavax.swing.Box;

importjavax.swing.JButton;

importjavax.swing.JComboBox;

importjavax.swing.JFrame;

importjavax.swing.JLabel;

importjavax.swing.JPanel;

importjavax.swing.JScrollPane;

importjavax.swing.JSplitPane;

importjavax.swing.JTextArea;

importjavax.swing.JTextField;

importxiao.it.ConSDecorator.Beef;

importxiao.it.ConSDecorator.Egg;

importxiao.it.ConSDecorator.Tofu;

importxiao.it.cocretnoodle.Gnoodles;

importxiao.it.cocretnoodle.Snoodle;

importxiao.it.cocretnoodle.WNoodle;

importxiao.it.noodle.Nooldel;

publicclassUI{

publicvoidinit(){

JFramef=newJFrame();

f.setBounds(0,0,400,200);

Stringstr[]={"干浆米线","酸浆米线","水米线"};

JPanelp1=newJPanel();

JLabell1=newJLabel("加牛肉:

");

finalJTextFieldjt1=newJTextField(10);

JLabell11=newJLabel("倍");

p1.add(l1);

p1.add(jt1);

p1.add(l11);

JPanelp2=newJPanel();

JLabell2=newJLabel("加鸡蛋:

");

finalJTextFieldjt2=newJTextField(10);

JLabell12=newJLabel("倍");

p2.add(l2);

p2.add(jt2);

p2.add(l12);

JPanelp3=newJPanel();

JLabell3=newJLabel("加豆腐:

");

finalJTextFieldjt3=newJTextField(10);

JLabell13=newJLabel("倍");

p3.add(l3);

p3.add(jt3);

p3.add(l13);

JButtonjtn=newJButton("点一份");

finalJComboBoxj1=newJComboBox(str);

j1.setPreferredSize(newDimension(200,20));

//j1.setBounds(0,0,200,20);

Boxbox1=Box.createVerticalBox();

Boxbox2=Box.createVerticalBox();

box1.add(j1);

box1.add(p1);

box1.add(p2);

box1.add(p3);

box1.add(jtn);

finalJTextAreatea=newJTextArea();

jtn.addActionListener(newActionListener(){

@Override

publicvoidactionPerformed(ActionEvente){

//TODOAuto-generatedmethodstub

Stringstring=(String)j1.getSelectedItem();

Nooldeln=null;

if(string.equals("干浆米线")){

n=newGnoodles();

}elseif(string.equals("酸浆米线")){

n=newSnoodle();

}elseif(string.equals("水米线")){

n=newWNoodle();

}

inta=Integer.parseInt(jt1.getText());

for(inti=0;i

n=newBeef(n);

n=newTofu(n);

}

intb=Integer.parseInt(jt2.getText());

for(inti=0;i

n=newEgg(n);

}

intc=Integer.parseInt(jt3.getText());

for(inti=0;i

n=newTofu(n);

}

tea.setText(n.getDescription()+":

"+n.cost()+"元");

}

});

box2.add(newJScrollPane(tea));

JSplitPanetop=newJSplitPane(JSplitPane.HORIZONTAL_SPLIT,false,

box1,box2);

f.add(top);

f.setVisible(true);

}

publicstaticvoidmain(String[]args){

newUI().init();

}

}

运行结果

四、实验总结:

 

指导教师签名:

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

当前位置:首页 > 自然科学 > 物理

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

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