《设计模式》 课程大作业报告
姓 名: 专 业: 班 级: 日 期:
陈明 软件工程 1202 2015年5月29日
-- - - -_- _- _- -_- -号 - - 位-- - 座- - - - - - - _- -_ - _- _- -号 -○场 线考- -- - - --_- _- -_ -_- -_ - _- _- -_ - 名- - -姓 - - - ○ 封- _- _-- _--_ - _- -_- _- -_ - _- _- -_ - 级- - -班 - - - - ○ _密- _-- _--_ - _- -_- _- -_ - _- _- -_ -_- -_ - 号- -- 学- - - -- - - -
西安欧亚学院2014—2015学年第二学期考试试卷
专业:软件工程 课程:设计模式 年级:12级
评卷人 1 2 3 4 总分
完成一个综合项目程序,其中使用所学设计模式两个或者两个以上。要求在文档中首先给出项目程序完成的功能或者解决的问题,然后详细说明模式使用的具体情况,即角色和相应程序代码。文档赋分标准如下:
1、程序功能阐述明确,分析清楚。(15分)
2、使用两种设计模式,使用得当,并给出相应的角色及程序代码,程序代码有恰当的注释。(60分)
3、文档格式正确,排版清晰。(15分)
4、如果使用超过两种设计模式,并且使用正确。(10分)
说明:以上总分为个人的期末成绩,本课程个人总成绩=平时成绩*40%+期末成绩*60%。
用户和药店以及制药厂交互的例子
一、程序功能描述
工厂方法模式:为某药店开发的应用程序需要使用Drug类的某个子类的实例为用户提供药品,而不直接使用Drug的子类的构造方法直接创造对象。因为药店没有能力给出药品的各个成分的含量,只有药厂才有这样的能力。
抽象工厂模式:通过创建多个药品工厂的类,让用户可以和创建的对象的类进行脱耦,为用户提供多个相关的药品,方便用户联合使用它们,用户不需要知道药品具体的生产过程
将“工厂方法模式”与“抽象工厂模式”相结合,实现用户和创建对象的类脱耦,并且为用户提供多个相关的对象。买药的用户只需要知道去药店买什么药就行了,不必去药厂,也不需要知道要的成分,只需要去药店,然后药店就会提供所需药品的信息,包括成分和生产厂商以及对应的生产线。
二、程序代码
文件1:Drug.java
public abstract class Drug { //抽象产品类
public abstract String getType(); //获取药品类型 public String getName() { //获取药品名称 }
return name;
public String getConstitute() { //获得药品成分 }
return constitute;
String constitute; String name;
}
文件2:Paracetamol.java
public class Paracetamol extends Drug{ //具体产品类
public Paracetamol(String name, int[] a) { //具体药品,并创建数组用来存
放药品的各种成分含量
@Override
public String getType() { //获取药品类型
return type = \氨加黄敏胶囊\
public Paracetamol() { //具体药品所在生产线 }
System.out.println(\氨加黄敏胶囊是使用1号生产线生产的。\ }
this.name = name;
part1 = part1 + \:\毫克\\n\part2 = part2 + \:\毫克\\n\part3 = part3 + \:\毫克\\n\part4 = part4 + \:\毫克\\n\constitute = part1 + part2 + part3 + part4;
String part1 = \每粒含乙酰氨基酚\String part2 = \每粒含咖啡因\String part3 = \每粒含人工牛黄\String part4 = \每粒含马来酸氯苯\String type;
}
}
文件3:Amorolfine.java
public class Amorolfine extends Drug{ //具体产品类
@Override
public String getType() { }
文件4:DrugCreator.java
// TODO Auto-generated method stub return type = \甲硝唑胶囊\}
public Amorolfine() { }
System.out.println(\甲硝唑胶囊是使用2号生产线生产的。\
public Amorolfine(String name, int[] a) { }
this.name = name;
part1 = part1 + \:\毫克\\n\part2 = part2 + \:\毫克\\n\constitute = part1 + part2; String part1 = \每粒含甲硝唑\String part2 = \每粒含人工牛黄\String type;