设计模式练习(19)——策略模式
来源:互联网 发布:中文手写软件下载 编辑:程序博客网 时间:2024/06/05 15:02
策略模式
一、题目:
设计一个网上书店,该系统中所有的计算机图书(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); }}
五、运行结果:
0 0
- 设计模式练习(19)——策略模式
- 设计模式(1)—策略模式
- 设计模式—策略模式(二)
- 设计模式—策略模式
- 设计模式—策略模式
- 设计模式—策略模式
- 设计模式—策略模式
- 设计模式—策略模式
- 设计模式—策略模式
- 设计模式—策略模式
- 设计模式—策略模式
- 设计模式—策略模式
- 设计模式—策略模式
- 设计模式—策略模式
- 设计模式—策略模式
- 设计模式——策略模式(行为型模式)
- 设计模式——策略设计模式
- 常用设计模式(六)——策略设计模式
- php实现MD5withRSA签名算法
- Vs3013 SDKDDKVer.h 找不到等错误的解决方案之一
- .net 引用程序集发生冲突时的解决办法
- 读《游戏之旅-我的编程感悟》
- 袋鼠云成企业服务潜力新星 云市场生态持续发酵
- 设计模式练习(19)——策略模式
- js
- 关于mysql查询结果单位换算后小数位数的保留方式
- 可移动Beacon(蓝牙)现场布控小结
- Hadoop-2.7.3集群(HA HDFS)搭建
- libiconv库链接问题一则
- thinkphp 分布式数据库 详解
- jquery操作input、select、checkbox、radio常用方法
- mac环境利用SDKMAN安装gradle