云南大学软件学院
实 验 报 告
序号: 姓名: 杨林燕 学号: 106 专业: 软件工程 日期: 成绩: 实验二 装饰者模式的运用
一、实验目的:
装饰者模式动态地将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹
性的替代方案。在熟悉装饰者模式相关理论知识的基础上,使用装设者模式实现米线店结账小程序。
二、实验要求:
使用装饰者模式实现米线店结账程序,要求如下:
1. 米线有三种,干浆、酸浆和水米线。
2. 配料有三种,豆腐、鸡蛋、牛肉,今后还会更多。
3. 客户可疑随心所欲的要各种米线搭配各种配料,配料可以加同一种加多份,或者不同种加多份。
1、 设计并绘制该程序的类图;
2、 依照设计的类图使用Java语言编写代码,并实现该程序;
3、 除了核心的模式相关类实现外,提供测试环境,按照难度高低,分别是:
a) 控制台程序,Client硬编码初始化模式和测试环境,运行结果文本输出; b) 控制台程序,Client初始化测试环境,并根据用户输入运算,运行结果文本输出; c) 设计并实现用户UI,Client初始化测试环境,并根据用户在UI控件上的输入运算,
运行结果文本输出;
三、实验内容: 1.类图
NiuRou MiXian miXian getDescription() cost()
SuanJiang Cost() JiDan MiXian miXian getDescription() cost() CondimentDecorator getDescription() DouFu MiXian miXian getDescription() cost() MiXian Description getDescription() cost() GanJiang Cost() 2.代码 ShuiJiang Cost() MiXian类:
package ;
public abstract class MiXian {
}
String description;
public String getDescription() { }
return description;
public abstract double cost();
CondimentDecorator类:
public abstract class CondimentDecorator extends MiXian { }
public abstract String getDescription();
GanJiang类:
public class GanJiang extends MiXian { }
public GanJiang() { }
public double cost() { }
return .20;
description = \干浆米线\;
SuanJiang类:
public class SuanJiang extends MiXian {
public SuanJiang() { }
description = \酸浆米线\;
}
public double cost() { }
return .25;
ShuiJiang类:
public class ShuiJiang extends MiXian { }
public double cost() { }
return .15; public ShuiJiang() { }
description = \水浆米线\;
DouFu类:
public class DouFu extends CondimentDecorator {
public double cost() {
return .05 + ();
public String getDescription() { }
return () + \豆腐\; public DouFu(MiXian miXian) { }
= miXian; MiXian miXian;
}
NiuRou类:
public class NiuRou extends CondimentDecorator {
public double cost() { }
return .15 + ();
public String getDescription() { }
return () + \牛肉\; public NiuRou(MiXian miXian) { }
= miXian; MiXian miXian;
}
JiDan类:
public class JiDan extends CondimentDecorator {
public String getDescription() { }
return () + \鸡蛋\; public JiDan(MiXian miXian) { }
= miXian; MiXian miXian;