您好,欢迎访问三七文档
1实验五设计模式一、实验目的了解策略模式的定义及结构,结合实例学习如何在软件开发中使用策略模式,并理解策略模式的优缺点,以及了解策略模式的应用。二、实验内容用Java语言来实现策略模式。具体场景是网上书店的折扣活动。设计一个网上书店,该系统中所有的计算机类图书(ComputerBook)每本都有10%的折扣,语言类图书(LanguageBook)总价减5元,小说类图书(NovelBook)每100有10元的折扣。现使用策略模式来设计该系统,绘制类图并编程实现。其中:环境类(上下文类)是Price,它是使用算法的角色,在解决图书的价钱问题时可以采用三种策略。在环境类中维护一个对抽象策略类的饮用实例,用于定义所采用的策略。抽象策略类是BookStraregy,它为所支持的算法声明了抽象方法,是抽象策略类ComputerBookStrategy、LanguageBookStrategy、NovelBookStrategy的父类。环境类Price使用在其中声明的方法调用在具体策略类中实现的算法。具体策略类有:ComputerBookStrategy、LanguageBookStrategy、NovelBookStrategy三个。他们实现累在抽象策略类中定义的算法,在运行时,具体策略类将覆盖在环境类Price中定义的抽象策略类对象,使用其中一种具体的算法实现业务处理。实现流程:首先将不同的算法从环境类(上下文类)Price中提取出来,创建一个抽象策略类BookStrategy作为父类。Price类定义并维持了对抽象策略类BookStrategy的一个引用,通过其方法quote()可以在运行时设置一种具体的策略,并在其Price()中调用策略类提供的算法完成相应的业务处理。再将ComputerBookStrategy、LanguageBookStrategy、NovelBookStrategy三种具体算法作为BookStrategy抽象策略类的子类。其中ComputerBookStrategy实现对计算机类图书每本10%折扣的算法,LanguageBookStrategy实现对语言类图书5元优惠的算法,NovelBookStrategy实现对小说类图书每100元减10元的算法。在环境类Price里,与抽象策略类BookStrategy之间建立一个关联。部分参考代码如下:BookStrategy.classpublicinterfaceBookStrategy{//抽象策略类doublecalcPrice(doublevar1);}Computer.classpublicclassComputerimplementsBookStrategy{//具体策略类计算机类图书的计价方法,继承BookStrategy类publicComputer(){}publicdoublecalcPrice(doublebooksPrice){System.out.println(Computerbook10%discount.);returnbooksPrice*0.9D;}}2Test.classimportjava.util.Scanner;publicclassTest{publicstaticvoidmain(String[]args){//定义相对应的具体策略对象Computerstrategy1=newComputer();Languagestrategy2=newLanguage();Novelstrategy3=newNovel();doublequote=0.0D;//计算总价Scannerin=newScanner(System.in);doublebPrice;Priceprice;doublezPrice;//调用具体策略计算计算机类图书的价钱System.out.println(Pleaseenterthepriceofcomputerbooks.);bPrice=in.nextDouble();price=newPrice(strategy1);zPrice=price.quote(bPrice);System.out.println(PrimePrice:+bPrice+,DiscountPrice:+zPrice);System.out.println();quote+=zPrice;//累计总价//调用具体策略计算语言类机类图书的价钱System.out.println(PleaseenterthepriceofLanguagebooks.);bPrice=in.nextDouble();price=newPrice(strategy2);zPrice=price.quote(bPrice);System.out.println(PrimePrice:+bPrice+,DiscountPrice:+zPrice);System.out.println();quote+=zPrice;//累计总价//调用具体策略计算小说类图书的价钱System.out.println(PleaseenterthepriceofNovelbooks.);bPrice=in.nextDouble();price=newPrice(strategy3);zPrice=price.quote(bPrice);System.out.println(PrimePrice:+bPrice+,DiscountPrice:+zPrice);System.out.println();quote+=zPrice;//累计总价System.out.println(Total:+quote);//输出总价return;}}三、画出UML图并给出程序代码和运行结果(程序运行结果要求给出截图)3四、总结和体会注:实验作业提交要求:完成实验内容中的题目,将实验报告按要求提交至ftp相应目录中:
本文标题:实验五
链接地址:https://www.777doc.com/doc-7284444 .html