admin管理员组文章数量:1794759
设计模式练习(19)——策略模式
策略模式
一、题目:
设计一个网上书店,该系统中所有的计算机图书(ComputerBook),每本都有10%的折扣;所有的语言类图书(LanguageBook),每本有2元的折扣;小说类图书以每100元有10元的折扣,用策略模式设计该系统 (1)绘制策略模式结构视图 (2)给出实例类图并实现代码
二、所用模式结构视图:
三、实例类图:
四、实例实现代码:
(因为区分,所以在类的前面加了Gj19)
策略接口
package gjStrategyPattern; /** * 策略接口 * @author gong * */ public interface Gj19BookStrategy { double calPrice(double price); }计算机书籍打折策略
package gjStrategyPattern; /** * 计算机书籍打折策略 * @author gong * */ public class Gj19ComputerStrategy implements Gj19BookStrategy{ /** * 具体的打折策略 */ @Override public double calPrice(double price) { System.out.println("所有的计算机图书 每本都有10%的折扣"); return price*0.9D; } public Gj19ComputerStrategy() { } }语言书籍打折策略类
package gjStrategyPattern; /** * 语言书籍打折策略类 * @author gong * */ public class Gj19LanguageStrategy implements Gj19BookStrategy{ /** * 每本书减去2元 */ @Override public double calPrice(double price) { System.out.println("语言类图书 每本有2元的折扣"); return price-2.0D; } public Gj19LanguageStrategy() { } }小说的打折策略类
package gjStrategyPattern; /** * 小说的打折策略类 * * @author gong * */ public class Gj19NovelStrategy implements Gj19BookStrategy { @Override public double calPrice(double price) { System.out.println("小说类图书以每100元有10元的折扣"); int p = (int) price; return price-(double)(p/100*10); } public Gj19NovelStrategy() { } }计算价格的类
package gjStrategyPattern; /** * 计算价格的类 * @author gong * */ public class Gj19Price { /** * 创建抽象的策略模式 */ private Gj19BookStrategy bookStrategy; public Gj19Price(Gj19BookStrategy bookStrategy){ this.bookStrategy = bookStrategy; } public double sum(double price){ return this.bookStrategy.calPrice(price); } }策略模式客户端
package gjStrategyPattern; /** * 策略模式客户端 * @author gong * */ public class Client { //调用计算机书籍的打折策略 public static void main(String[] args) { //定义具体的打折策略 Gj19ComputerStrategy computerStrategy = new Gj19ComputerStrategy(); Gj19LanguageStrategy gj19LanguageStrategy = new Gj19LanguageStrategy(); Gj19NovelStrategy gj19NovelStrategy = new Gj19NovelStrategy(); //原价 折后价 double price = 520.0D; double discountPrice; //计算机书籍打折策略 System.out.println("========================计算机书籍打折策略======================="); System.out.println("打折前的价格为:"+price); discountPrice = new Gj19Price(computerStrategy).sum(price); System.out.println("打折后的价格为:"+discountPrice); System.out.println("================================================================"); //语言书籍打折策略 System.out.println("=========================语言书籍打折策略========================"); System.out.println("打折前的价格为:"+price); discountPrice = new Gj19Price(gj19LanguageStrategy).sum(price); System.out.println("打折后的价格为:"+discountPrice); System.out.println("================================================================"); //小说书籍打折策略 System.out.println("==========================小说书籍打折策略======================="); System.out.println("打折前的价格为:"+price); discountPrice = new Gj19Price(gj19NovelStrategy).sum(price); System.out.println("打折后的价格为:"+discountPrice); } }五、运行结果:
版权声明:本文标题:设计模式练习(19)——策略模式 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686518717a76763.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论