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