1、装饰者模式肖正文云南大学软件学院实 验 报 告序号: 姓名:肖正文 学号:20121120141专业:软件工程 日期:2014/12/10 成绩: 实验二 装饰者模式的运用一、实验目的: 装饰者模式动态地将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案。在熟悉装饰者模式相关理论知识的基础上,使用装设者模式实现米线店结账小程序。二、实验要求:使用装饰者模式实现米线店结账程序,要求如下:1. 米线有三种,干浆、酸浆和水米线。2. 配料有三种,豆腐、鸡蛋、牛肉,今后还会更多。3. 客户可疑随心所欲的要各种米线搭配各种配料,配料可以加同一种加多份,或者不同种加多份。1、 设计并绘
2、制该程序的类图;2、 依照设计的类图使用Java语言编写代码,并实现该程序;3、 除了核心的模式相关类实现外,提供测试环境,按照难度高低,分别是:a) 控制台程序,Client硬编码初始化模式和测试环境,运行结果文本输出;b) 控制台程序,Client初始化测试环境,并根据用户输入运算,运行结果文本输出;c) 设计并实现用户UI,Client初始化测试环境,并根据用户在UI控件上的输入运算,运行结果文本输出;三、实验内容: 1类图2代码主类:米线类package xiao.it.noodle;public abstract class Nooldel private String descri
3、ption=null; public String getDescription() return description;public void setDescription(String description) this.description = description;public abstract double cost(); 三种米线package xiao.it.cocretnoodle;import xiao.it.noodle.Nooldel;public class Gnoodles extends Nooldel public Gnoodles() String des
4、cription=干浆米线; setDescription(description); Override public double cost() / TODO Auto-generated method stub return 1; package xiao.it.cocretnoodle;import xiao.it.noodle.Nooldel;public class Snoodle extends Nooldel public Snoodle() String description=酸浆米线; setDescription(description); Override public
5、 double cost() / TODO Auto-generated method stub return 2; package xiao.it.cocretnoodle;import xiao.it.noodle.Nooldel;public class WNoodle extends Nooldel public WNoodle() String description=水米线; setDescription(description); Override public double cost() / TODO Auto-generated method stub return 3; 装
6、饰者接口package xiao.it.ConPDecorator;/* * 抽象的装饰类 */import xiao.it.noodle.Nooldel;public abstract class Peiliao extends Nooldel public abstract String getDescription(); Override public double cost() / TODO Auto-generated method stub return 0; 具体装饰:package xiao.it.ConSDecorator;import xiao.it.ConPDecorat
7、or.Peiliao;import xiao.it.noodle.Nooldel;public class Beef extends Peiliao private Nooldel n=null; public Beef(Nooldel n) this.n=n; Override public String getDescription() String str=n.getDescription(); if(str.indexOf(牛肉)!=-1) return str; else return 牛肉+n.getDescription(); public double cost() retur
8、n 5+n.cost(); package xiao.it.ConSDecorator;import xiao.it.ConPDecorator.Peiliao;import xiao.it.noodle.Nooldel;public class Egg extends Peiliao private Nooldel n = null; public Egg(Nooldel n) this.n = n; Override public String getDescription() / TODO Auto-generated method stub String str=n.getDescri
9、ption(); if(str.indexOf(鸡蛋)!=-1) return str; else return 鸡蛋+n.getDescription(); public double cost() return 2+n.cost(); package xiao.it.ConSDecorator;import xiao.it.ConPDecorator.Peiliao;import xiao.it.noodle.Nooldel;public class Tofu extends Peiliao private Nooldel n=null; public Tofu(Nooldel n) th
10、is.n=n; Override public String getDescription() / TODO Auto-generated method stub String str=n.getDescription(); if(str.indexOf(豆腐)!=-1) return str; else return 豆腐+n.getDescription(); public double cost() return n.cost()+1; UI类:package xiao.it.UI;import java.awt.Dimension;import java.awt.event.Actio
11、nEvent;import java.awt.event.ActionListener;import javax.swing.Box;import javax.swing.JButton;import javax.swing.JComboBox;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JSplitPane;import javax.swing.JTextArea;import ja
12、vax.swing.JTextField;import xiao.it.ConSDecorator.Beef;import xiao.it.ConSDecorator.Egg;import xiao.it.ConSDecorator.Tofu;import xiao.it.cocretnoodle.Gnoodles;import xiao.it.cocretnoodle.Snoodle;import xiao.it.cocretnoodle.WNoodle;import xiao.it.noodle.Nooldel;public class UI public void init() JFra
13、me f=new JFrame(); f.setBounds(0, 0, 400, 200); String str=干浆米线,酸浆米线,水米线; JPanel p1=new JPanel(); JLabel l1=new JLabel(加牛肉:); final JTextField jt1=new JTextField(10); JLabel l11=new JLabel(倍); p1.add(l1); p1.add(jt1); p1.add(l11); JPanel p2=new JPanel(); JLabel l2=new JLabel(加鸡蛋:); final JTextField
14、jt2=new JTextField(10); JLabel l12=new JLabel(倍); p2.add(l2); p2.add(jt2); p2.add(l12); JPanel p3=new JPanel(); JLabel l3=new JLabel(加豆腐:); final JTextField jt3=new JTextField(10); JLabel l13=new JLabel(倍); p3.add(l3); p3.add(jt3); p3.add(l13); JButton jtn=new JButton(点一份); final JComboBox j1=new JC
15、omboBox(str); j1.setPreferredSize(new Dimension(200, 20); /j1.setBounds(0, 0, 200, 20); Box box1=Box.createVerticalBox(); Box box2=Box.createVerticalBox(); box1.add(j1); box1.add(p1); box1.add(p2); box1.add(p3); box1.add(jtn); final JTextArea tea=new JTextArea(); jtn.addActionListener(new ActionList
16、ener() Override public void actionPerformed(ActionEvent e) / TODO Auto-generated method stub String string=(String)j1.getSelectedItem(); Nooldel n=null; if(string.equals(干浆米线) n=new Gnoodles(); else if(string.equals(酸浆米线) n=new Snoodle(); else if(string.equals(水米线) n=new WNoodle(); int a=Integer.par
17、seInt(jt1.getText(); for(int i=0;ia;i+) n=new Beef(n); n=new Tofu(n); int b=Integer.parseInt(jt2.getText(); for(int i=0;ib;i+) n=new Egg(n); int c=Integer.parseInt(jt3.getText(); for(int i=0;ic;i+) n=new Tofu(n); tea.setText(n.getDescription()+:+n.cost()+元); ); box2.add(new JScrollPane(tea); JSplitPane top = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, false, box1, box2); f.add(top); f.setVisible(true); public static void main(String args) new UI().init(); 运行结果四、实验总结: 指导教师签名:
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2