策略模式

一、题目:

设计一个网上书店,该系统中所有的计算机图书(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{/*** 具体的打折策略*/@Overridepublic double calPrice(double price) {System.out.println("所有的计算机图书 每本都有10%的折扣");return price*0.9D;}public Gj19ComputerStrategy() {}}

语言书籍打折策略类

package gjStrategyPattern;/*** 语言书籍打折策略类* @author gong**/
public class Gj19LanguageStrategy implements Gj19BookStrategy{/*** 每本书减去2元*/@Overridepublic double calPrice(double price) {System.out.println("语言类图书 每本有2元的折扣");return price-2.0D;}public Gj19LanguageStrategy() {}}

小说的打折策略类

package gjStrategyPattern;/*** 小说的打折策略类* * @author gong**/
public class Gj19NovelStrategy implements Gj19BookStrategy {@Overridepublic 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)——策略模式相关推荐

  1. 设计模式 ( 十八 ) 策略模式Strategy(对象行为型)

    设计模式 ( 十八 ) 策略模式Strategy(对象行为型) 1.概述 在软件开发中也经常遇到类似的情况,实现某一个功能有多种算法或者策略,我们能够依据环境或者条件的不同选择不同的算法或者策略来完毕 ...

  2. 设计模式入门(策略模式)

    [0]README 0.1)本文部分文字描述转自 "head first 设计模式",旨在学习 设计模式入门(策略模式) 的基础知识: 0.2)本文章节4和5的source cod ...

  3. 设计模式 之美 -- 策略模式

    策略模式作为行为型设计模式中的一种,主要封装相同功能的不同实现算法,用于在用户程序内部灵活切换.对用户来说能够快速替换对应的算法,能够让算法的实现独立于使用的用户. 基本的UML类图如下: 用户使用S ...

  4. Java设计模式之十一 ---- 策略模式和模板方法模式

    前言 在上一篇中我们学习了行为型模式的访问者模式(Visitor Pattern)和中介者模式(Mediator Pattern).本篇则来学习下行为型模式的两个模式,策略模式(Strategy Pa ...

  5. 《研磨设计模式》chap17 策略模式(2) 总结

    1. 新增加context 上下文类 eg. 发工资:发人民币和发美元 public interface PaymentStrategy {//公司给某人真正支付工资 public void pay( ...

  6. 设计模式四:策略模式

    策略模式 所谓策略其实就是做一件事情有很多很多的方法,比如说一个商场要搞促销,促销的方式有可能有很多:打折啊,满100返50啊.积分等等之类的.这种不同的促销方式在我们系统中表示就是一个一个的策略,并 ...

  7. JAVA中的设计模式三(策略模式)

    问题: 如何让算法和对象分开来,使得算法可以独立于使用它的客户而变化? 方案: 把一个类中经常改变或者将来可能改变的部分提取出来,作为一个接口,然后在类中包含这个对象的实例,这样类的实例在运行时就可以 ...

  8. 设计模式のStrategyPattern(策略模式)----行为模式

    一.问题产生背景 当我们进行一系列处理时(员工工资核算,会员管理,计算器,优惠活动),会有很多相似的算法和处理过程,只是由于具体的算法的差异,导致必须不同处理.这些处理和客户端无关,我们可以把这些算法 ...

  9. Java设计模式6:策略模式

    策略模式 策略模式的用意是针对一组算法,将每一个算法封装到具有共同接口的独立类中,从而使得它们可以相互替换.策略模式使得算法可以在不影响到客户端的情况下发生变化. 策略模式的结构 策略模式是对算法的包 ...

  10. [设计模式] javascript 之 策略模式

    策略模式说明 定义: 封装一系列的算法,使得他们之间可以相互替换,本模式使用算法独立于使用它的客户的变化. 说明:策略模式,是一种组织算法的模式,核心不在于算法,而在于组织一系列的算法,并且如何去使用 ...

最新文章

  1. 零基础入门学习Pyhton(23)字典:当索引不好用时
  2. python爬歌词生成词云图_爬取每日热搜词,生成地图词云图
  3. JVM在JDK1.8的变化
  4. 图像处理之特征描述与匹配
  5. Bootstrap 的过渡效果
  6. html 获取本地txt输出,html 5 读取本地文件API
  7. javascript 模块化(一)——SeaJS
  8. opencv︱图片与视频的读入、显示、写出、放缩与基本绘图函数介绍
  9. arcpy批量重命名
  10. 现控笔记(六)线性定常系统综合
  11. LimeSDR Mini轻松上手系列1: 介绍
  12. C++builder应用程序设计流程
  13. TensorFlow中的Shape如何理解
  14. python心得总结知识点和收获,千锋Python培训学员心得 在总结中收获提升
  15. Java 后端不懂 GC 调优很丢脸吗?
  16. Nginx配置文件目录实现pdf文件预览及下载
  17. chromecast网络访问受限
  18. Java修仙,法力无边(光速回顾Java基础~)
  19. 有向图 G=(V, E) 的拓扑排序
  20. 深度分解服务业细分领域O2O

热门文章

  1. DataTables从入门到精通
  2. C++数组中的元素删除、移动
  3. Linux中的文件传输
  4. 搞笑短信笑话-最新搞笑短片
  5. 计算机视觉——【模型训练】bug解决 'Please use alternatives such as official/mnist/dataset.py'的解决
  6. 图论——二分图——最小点覆盖
  7. python毕业设计作品基于django框架新闻信息管理系统毕设成品(6)开题答辩PPT
  8. STM32硬件IIC 主从(一、CubeMx快速实现)
  9. 如何“假装”成为一名好程序员?
  10. java 10进制转2进制递归算法_Java十进制转二进制,递归算法