2019独角兽企业重金招聘Python工程师标准>>>

实例:商店促销

(1)首先考虑用简单工厂模式进行设计

Ø  客户端代码Main.java

package com.yilong.sell.factory;

public class Main {

public static void main(String[] args) {

//SellMethod sellMethod = SellMethodFactory.create("原价");

SellMethod sellMethod = SellMethodFactory.create("方案一");

if(sellMethod != null) {

sellMethod.setPrePrice(10);

sellMethod.setAmount(10);

System.out.println("总价:" + sellMethod.getSumPrice());

} else {

System.out.println("暂未定义该销售方案!");

}

}

}

Ø  促销形式类 SellMethod.java

package com.yilong.sell.factory;

public abstract class SellMethod {

private double prePrice;

private int amount;

public abstract double getSumPrice();

public int getAmount() {

return amount;

}

public void setAmount(int amount) {

this.amount = amount;

}

public double getPrePrice() {

return prePrice;

}

public void setPrePrice(double prePrice) {

this.prePrice = prePrice;

}

}

Ø  原价销售实现类 SellMethodPrototype.java

package com.yilong.sell.factory;

public class SellMethodPrototype extends SellMethod {

@Override

public double getSumPrice() {

return this.getPrePrice() * this.getAmount();

}

}

Ø  打折销售实现类 SellMethodDiscount.java

package com.yilong.sell.factory;

public class SellMethodDiscount extends SellMethod {

public static final double DISCOUNT = 0.5;

@Override

public double getSumPrice() {

return this.getPrePrice() * this.getAmount() * this.DISCOUNT;

}

}

Ø  销售方法生产类 SellMethodFactory.java

package com.yilong.sell.factory;

public class SellMethodFactory {

public static SellMethod create(String method) {

SellMethod sellMethod = null;

if(method.equals("原价")) {

sellMethod = new SellMethodPrototype();

} else if(method.equals("方案一")){

sellMethod = new SellMethodDiscount();

}

return sellMethod;

}

}

(2)然后考虑用策略模式实现

Ø  客户端代码 Main.java

package com.yilong.sell.strategy;

public class Main {

public static void main(String[] args) {

SellGood sellGood = new SellGood("打5折");

sellGood.setPrePrice(10);

sellGood.setAmount(10);

System.out.println("总价:" + sellGood.getSumPrice());

}

}

Ø  销售方式类 SellMethod.java

package com.yilong.sell.strategy;

public abstract class SellMethod {

public abstract double getSumPrice(double prePrice, int amount);

}

Ø  原价销售类 SellMethodPrototype.java

package com.yilong.sell.strategy;

public class SellMethodPrototype extends SellMethod {

@Override

public double getSumPrice(double prePrice, int amount) {

return prePrice * amount;

}

}

Ø  打折销售类 SellMethodDiscount.java

package com.yilong.sell.strategy;

public class SellMethodDiscount extends SellMethod {

public static final double DISCOUNT = 0.5;

@Override

public double getSumPrice(double prePrice, int amount) {

return prePrice * amount *

转载于:https://my.oschina.net/lovedreamland/blog/12996

设计模式 – 策略模式(Strategy)相关推荐

  1. 设计模式-策略模式(Strategy)-Java

    设计模式-策略模式(Strategy)-Java 目录 文章目录 1.前言 2.示例案例-电影票打折方案 3.策略模式概述 3.1.策略模式定义 3.2.策略模式结构 3.3.策略模式结构图中角色 3 ...

  2. 解读设计模式----策略模式(Strategy Pattern)

    一.模式概述      策略模式(Strategy Pattern)在外形上与状态模式很相似,但在意图上有些不同.其意图是使这些算法可以相互替换,并提供一种方法来选择最合适的算法.       在我应 ...

  3. 设计模式--策略模式(strategy)

    1.策略模式(strategy ['strætədʒi]) 我的理解是:方案候选模式 (反正关键就是有很多的候选,哈哈) 看了很多例子,都是在说鸭子的,那个例子很好,在这里可以看 他们生产鸭子,我们就 ...

  4. 李建忠设计模式——策略模式Strategy

    目录 1.策略模式定义 1.动机 2.模式定义 3.结构 2.实现例子 1.问题描述 2.代码实现 3.要点总结 4.参考 1.策略模式定义 1.动机 软件构建过程中,某些对象使用的算法可能多种多样, ...

  5. 关于设计模式——策略模式-Strategy Pattern

    文章目录 1 策略模式 1.1 模拟鸭子 1.2 设计原则 1.3 整合行为 1.4 模拟鸭子代码的代码 1.5 动态设定行为 1.6 重新查看整体 1.7 继承和组合 1.8 总结 1.9 优劣期间 ...

  6. 趣谈设计模式 | 策略模式(Strategy):你还在使用冗长的if-else吗?

    文章目录 案例:指挥官AI 策略模式 配合工厂模式 总结 完整代码与文档 案例:指挥官AI 案例可能不符合实际逻辑,仅用于表述设计模式的思想,勿介意 假设我们开发了一款类似全面战争的即时战略游戏,为了 ...

  7. 设计模式 - 策略模式Strategy

    策略模式(Strategy): 定义了算法家族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户. 1 using System; 2 using System.Co ...

  8. 设计模式——策略模式( Strategy Pattern )

    写代码超过千行,自定义类10个以上,往往写着写着就觉的乱,最终决定抽空补习下设计模式方面的知识.本来AS3出了本关于设计模式的书的,国人也翻译了.我同事也早早买了一本,但前些天我借来看了几页,翻译的太 ...

  9. Java设计模式-策略模式(Strategy)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.策略模式 二.策略模式示例代码 1.支付策略 2.具体支付策略实现 3.策略执行对象 4.测试 总结 前言 本篇介 ...

最新文章

  1. web安全简介_Web安全:HTTP简介
  2. eureka集群 ha_Eureka
  3. C#类型转换运算符之 explicit implicit
  4. Perlin Noise algorithms(备忘)
  5. request Form request QueryString
  6. 删除特定Dns后缀_DNS根服务器里存了世界上所有的域名吗?
  7. oc 经常用到弹出view的方法
  8. php post 二维数组,php curl模拟post请求和提交多维数组的示例代码
  9. Flask 框架中 上下文基础理念,包括cookie,session存储方法,requset属性,current_app模块和g模块...
  10. excel导入数据到mysql数据库
  11. 折腾linux随笔 之 关闭Budgie默认自动隐藏应用的菜单栏 与 Gnome系桌面应用菜单无内容解决...
  12. VMware中的三种网络模式
  13. 专访深度学习之父Geoffrey Hinton:人工智能的向量之舞
  14. 网络安全组(NSG)简介
  15. 如何实现视觉识别颜色
  16. 如何将AVIF格式转换为PNG格式
  17. 给我五分钟,带你彻底掌握 MyBatis 缓存的工作原理
  18. C++ string大小写转换
  19. box-shadow的使用
  20. 手机端判断用户代理,浏览器版本,内核信息等

热门文章

  1. 向往的生活---考研路上的励志鸡汤
  2. Mysql foreignkey 相关
  3. 一系列图论问题[转]
  4. 下载服务器文件到本地
  5. syslog-ng 正确配置udp接受端口
  6. android 通知折叠点击,如何折叠Android通知?
  7. 隐藏层节点数对迭代次数分布规律的影响
  8. android ondestroy service,android – 在onDestroy()之后仍然运行的IntentService onHandleIntent()...
  9. Ardino基础教程 8_模拟值
  10. C++中类的多态与虚函数的使用