装饰者模式肖正文.docx
- 文档编号:27462436
- 上传时间:2023-07-01
- 格式:DOCX
- 页数:12
- 大小:93.81KB
装饰者模式肖正文.docx
《装饰者模式肖正文.docx》由会员分享,可在线阅读,更多相关《装饰者模式肖正文.docx(12页珍藏版)》请在冰豆网上搜索。
装饰者模式肖正文
云南大学软件学院
实验报告
序号:
姓名:
肖正文学号:
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("点一份");
finalJComboBox
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());
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 装饰 模式 正文