设计模式 – 策略模式(Strategy)
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)相关推荐
- 设计模式-策略模式(Strategy)-Java
设计模式-策略模式(Strategy)-Java 目录 文章目录 1.前言 2.示例案例-电影票打折方案 3.策略模式概述 3.1.策略模式定义 3.2.策略模式结构 3.3.策略模式结构图中角色 3 ...
- 解读设计模式----策略模式(Strategy Pattern)
一.模式概述 策略模式(Strategy Pattern)在外形上与状态模式很相似,但在意图上有些不同.其意图是使这些算法可以相互替换,并提供一种方法来选择最合适的算法. 在我应 ...
- 设计模式--策略模式(strategy)
1.策略模式(strategy ['strætədʒi]) 我的理解是:方案候选模式 (反正关键就是有很多的候选,哈哈) 看了很多例子,都是在说鸭子的,那个例子很好,在这里可以看 他们生产鸭子,我们就 ...
- 李建忠设计模式——策略模式Strategy
目录 1.策略模式定义 1.动机 2.模式定义 3.结构 2.实现例子 1.问题描述 2.代码实现 3.要点总结 4.参考 1.策略模式定义 1.动机 软件构建过程中,某些对象使用的算法可能多种多样, ...
- 关于设计模式——策略模式-Strategy Pattern
文章目录 1 策略模式 1.1 模拟鸭子 1.2 设计原则 1.3 整合行为 1.4 模拟鸭子代码的代码 1.5 动态设定行为 1.6 重新查看整体 1.7 继承和组合 1.8 总结 1.9 优劣期间 ...
- 趣谈设计模式 | 策略模式(Strategy):你还在使用冗长的if-else吗?
文章目录 案例:指挥官AI 策略模式 配合工厂模式 总结 完整代码与文档 案例:指挥官AI 案例可能不符合实际逻辑,仅用于表述设计模式的思想,勿介意 假设我们开发了一款类似全面战争的即时战略游戏,为了 ...
- 设计模式 - 策略模式Strategy
策略模式(Strategy): 定义了算法家族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户. 1 using System; 2 using System.Co ...
- 设计模式——策略模式( Strategy Pattern )
写代码超过千行,自定义类10个以上,往往写着写着就觉的乱,最终决定抽空补习下设计模式方面的知识.本来AS3出了本关于设计模式的书的,国人也翻译了.我同事也早早买了一本,但前些天我借来看了几页,翻译的太 ...
- Java设计模式-策略模式(Strategy)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.策略模式 二.策略模式示例代码 1.支付策略 2.具体支付策略实现 3.策略执行对象 4.测试 总结 前言 本篇介 ...
最新文章
- web安全简介_Web安全:HTTP简介
- eureka集群 ha_Eureka
- C#类型转换运算符之 explicit implicit
- Perlin Noise algorithms(备忘)
- request Form request QueryString
- 删除特定Dns后缀_DNS根服务器里存了世界上所有的域名吗?
- oc 经常用到弹出view的方法
- php post 二维数组,php curl模拟post请求和提交多维数组的示例代码
- Flask 框架中 上下文基础理念,包括cookie,session存储方法,requset属性,current_app模块和g模块...
- excel导入数据到mysql数据库
- 折腾linux随笔 之 关闭Budgie默认自动隐藏应用的菜单栏 与 Gnome系桌面应用菜单无内容解决...
- VMware中的三种网络模式
- 专访深度学习之父Geoffrey Hinton:人工智能的向量之舞
- 网络安全组(NSG)简介
- 如何实现视觉识别颜色
- 如何将AVIF格式转换为PNG格式
- 给我五分钟,带你彻底掌握 MyBatis 缓存的工作原理
- C++ string大小写转换
- box-shadow的使用
- 手机端判断用户代理,浏览器版本,内核信息等
热门文章
- 向往的生活---考研路上的励志鸡汤
- Mysql foreignkey 相关
- 一系列图论问题[转]
- 下载服务器文件到本地
- syslog-ng 正确配置udp接受端口
- android 通知折叠点击,如何折叠Android通知?
- 隐藏层节点数对迭代次数分布规律的影响
- android ondestroy service,android – 在onDestroy()之后仍然运行的IntentService onHandleIntent()...
- Ardino基础教程 8_模拟值
- C++中类的多态与虚函数的使用