您好,欢迎访问三七文档
实验报告实验二装饰者模式的运用一、实验目的:装饰者模式动态地将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案。在熟悉装饰者模式相关理论知识的基础上,使用装设者模式实现米线店结账小程序。二、实验要求:使用装饰者模式实现米线店结账程序,要求如下:1.米线有三种,干浆、酸浆和水米线。2.配料有三种,豆腐、鸡蛋、牛肉,今后还会更多。3.客户可疑随心所欲的要各种米线搭配各种配料,配料可以加同一种加多份,或者不同种加多份。1、设计并绘制该程序的类图;2、依照设计的类图使用Java语言编写代码,并实现该程序;3、除了核心的模式相关类实现外,提供测试环境,按照难度高低,分别是:a)控制台程序,Client硬编码初始化模式和测试环境,运行结果文本输出;b)控制台程序,Client初始化测试环境,并根据用户输入运算,运行结果文本输出;c)设计并实现用户UI,Client初始化测试环境,并根据用户在UI控件上的输入运算,运行结果文本输出;三、实验内容:类图代码抽象类publicabstractclassRicenoodle{publicStringdescrption=米线;publicabstractdoublecost();publicStringgetDescrption(){returndescrption;}}基类publicclassDry_riceextendsRicenoodle{publicDry_rice(){this.descrption=干浆米线;}publicdoublecost(){return5;}}publicclassWintercherry_riceextendsRicenoodle{publicWintercherry_rice(){this.descrption=酸浆米线;}publicdoublecost(){return6;}}publicclassWater_riceextendsRicenoodle{publicWater_rice(){this.descrption=水米线;}publicdoublecost(){return6;}}配料装饰类publicabstractclassCondimentDecoratorextendsRicenoodle{publicabstractStringgetDescrption();}配料publicclassTofuextendsCondimentDecorator{Ricenoodler;publicTofu(Ricenoodler){this.r=r;}publicStringgetDescrption(){returnr.getDescrption()+加豆腐;}publicdoublecost(){returnr.cost()+2;}}publicclasseggextendsCondimentDecorator{Ricenoodler;publicegg(Ricenoodler){this.r=r;}publicStringgetDescrption(){returnr.getDescrption()+加鸡蛋;}publicdoublecost(){returnr.cost()+1.5;}}publicclassbeefextendsCondimentDecorator{Ricenoodler;publicbeef(Ricenoodler){this.r=r;}publicStringgetDescrption(){returnr.getDescrption()+加牛肉;}publicdoublecost(){returnr.cost()+4;}}订单测试importjava.util.Scanner;publicclasstest{publicstaticvoidmain(String[]args){Ricenoodle[]order=newRicenoodle[3];Scannersc=newScanner(System.in);order[0]=newDry_rice();order[1]=newWintercherry_rice();order[2]=newWater_rice();System.out.println(输入选项选择米线种类1干浆米线,2酸浆米线,3水米线);intmi=sc.nextInt();System.out.println(您购买了一份+order[mi-1].getDescrption());for(inti=0;i2;){System.out.println(输入选项选择调料1豆腐,2鸡蛋,3牛肉,4不加);intve=sc.nextInt();if(ve==1){order[mi-1]=newTofu(order[mi-1]);System.out.println(当前订单为+order[mi-1].getDescrption());}elseif(ve==2){order[mi-1]=newegg(order[mi-1]);System.out.println(当前订单为+order[mi-1].getDescrption());}elseif(ve==3){order[mi-1]=newbeef(order[mi-1]);System.out.println(当前订单为+order[mi-1].getDescrption());}elsei=4;System.out.println(是否还要加调料1yes2no);intk=sc.nextInt();if(k==1){i=1;}else{i=4;sc.close();}}System.out.println(您点的单为+order[mi-1].getDescrption()+\n价格为:+order[mi-1].cost());}}运行结果四、实验总结:通过本次实验,加深了对装饰者模式意图,使用场景以及使用效果的理解,提升了编程能力。指导教师签名:
本文标题:装饰者模式的运用
链接地址:https://www.777doc.com/doc-4600273 .html