策略模式:

策略模式是:定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。
Spring 中在实例化对象的时候用到 Strategy 模式,在 SimpleInstantiationStrategy 有使用。
归类:行为型模式
特点:最终执行结果是固定的,执行过程和执行逻辑不一样
场景:旅游出行方式,下单支付方式,快递方式

示例:下单支付方式的选择,此处选择的是枚举方式来枚举支付方式

订单类:

import com.example.demo.strategy.payport.PayType;public class Order {private String uid;private String orderNumber;private double amount;public Order(String uid, String orderNumber,Double amount){this.uid = uid;this.orderNumber = orderNumber;this.amount = amount;}public PayState pay(PayType payType){return payType.get().pay(this.uid,this.amount);}
}

返回值类:

public class PayState {private int code;private Object data;private String msg;public PayState(int code, String msg, Object data){this.code = code;this.data = data;this.msg = msg;}@Overridepublic String toString() {return "支付状态=" + code +", 交易详情=" + data +", msg='" + msg + '\'' +'}';}
}

支付方式接口类:

import com.example.demo.strategy.PayState;public interface Payment {PayState pay(String uid, Double amount);
}

支付方式实现类:

import com.example.demo.strategy.PayState;public class Alipay implements Payment {@Overridepublic PayState pay(String uid, Double amount) {System.out.println("欢迎使用支付宝!");System.out.println("使用支付宝余额支付!");return new PayState(200,"支付成功", amount);}
}
import com.example.demo.strategy.PayState;public class UnionPay implements Payment {@Overridepublic PayState pay(String uid, Double amount) {System.out.println("欢迎使用银联支付!");System.out.println("使用银行卡余额支付!");return new PayState(200,"支付成功", amount);}
}
import com.example.demo.strategy.PayState;public class WechatPay implements Payment {@Overridepublic PayState pay(String uid, Double amount) {System.out.println("欢迎使用微信!");System.out.println("使用微信余额支付!");return new PayState(200,"支付成功", amount);}
}

枚举类:

public enum PayType {ALIPAY(new Alipay()),WECHATPAY(new WechatPay()),UNIONPAY(new UnionPay());private Payment payment;PayType(Payment payment){this.payment = payment;}public Payment get(){return this.payment;}
}

测试类:

import com.example.demo.strategy.payport.PayType;public class PayStrategyTest {public static void main(String[] args) {Order order = new Order("1", "202003240001", 249.0);System.out.println(order.pay(PayType.WECHATPAY));}
}

策略模式思想及示例代码(Strategy)相关推荐

  1. java memento_Java备忘录(Memento)模式实现的示例代码

    Java备忘录(Memento)模式实现的示例代码 /** * 数据对象 * @author stone * */ public class DataState { private String ac ...

  2. Java使用Function包策略模式,优化业务代码大量if...else语句

    目录 场景模拟 Consumer与ToIntBiFunction简介,u> 场景Demo业务代码改造 最终结果 业务代码中,若存在大量无法避免的if...else代码,可以尝试使用JDK8提供的 ...

  3. Java策略模式讲解以及示例

    策略模式(Strategy Patten) 什么是策略模式? 比如对象的某个行为,在不同场景有不同实现方式,可以将这些行为的具体实现定义为一组策略,每个实现类实现种策略,在不同场景使用不同的实现,并且 ...

  4. Java设计模式策略模式(附实例代码)每天一学设计模式

    1.策略模式(Strategy Pattern):定义一系列算法,将每一个算法封装起来,并让它们可以相互替换.策略模式让算法可以独立于使用它的客户而变化. (1)Context(环境类):环境类是使用 ...

  5. Java SSM项目运用策略模式思想

    1. 策略模式简介 策略模式(Strategy Pattern)中,定义算法族(策略组),分别封装起来,让他们之间可以互相替换,此模式让算法的变更和替换独立于使用算法的客户. 策略模式中体现了如下几种 ...

  6. Java函数式实现替代策略模式解决 if...else代码,Map+函数式接口方法

    之前记录过用自定义注解和策略模式实现发不同消息的功能笔记: 文章地址:发送不同类型的消息----------策略模式_不受天磨非好汉,不遭人妒是庸才--着实着迷゛-CSDN博客r一:首先看下代码结构a ...

  7. c语言通过域组策略下发软件,windows 2008 server 域环境通过组策略下发计划任务(示例代码)...

    1.AD域环境 2.服务版本:2008 目的:通过组策略下发计划任务让客户端每天定时重启. 重启脚本内容: C:\WINDOWS\system32\shutdown.exe -r -t 60 @@ec ...

  8. [设计模式] —— Strategy 策略模式

    文章目录 Strategy 策略模式 动机 定义 示例代码 结构图 总结 Strategy 策略模式 组件协作模式通过晚绑定,来实现框架与应用程序之间的松耦合.是框架和引用程序协作常用的. 动机 某些 ...

  9. 设计模式18---设计模式之策略模式(Strategy)(行为型)

    1.场景模拟 简单的报价管理系统: 对于普通用户和新用户报全价 对于老客户统一折扣5% 对于大客户统一折扣10% 2.不用模式的解决方案 package demo16.strategy.example ...

最新文章

  1. PAT甲级1070 Mooncake:[C++题解]贪心
  2. leader选举的源码分析-runFromConfig
  3. arduino与matlab联调出现问题
  4. sql语句回忆录1-多表连接子查询
  5. 改造u3d第一人称控制器,使之适合Cardboard+蓝牙手柄控制
  6. java安卓游戏源码下载_77个安卓游戏 android源码
  7. 10种优化Mac以获得最佳性能的简便方法
  8. 微型计算机补码运算电路特点,二进制数的运算及其加法电路
  9. 邮箱格式怎么填写才正确?Tom邮箱格式怎么写?邮箱的正确填写?
  10. 理想L9/路特斯Eletre /高合HiPHi Z首发,谁能捅破智能豪华天花板?
  11. java module和model_Java9-Modularity 初探
  12. ctr多少正常_你知道亚马逊的点击率多少算正常的吗?
  13. Ubuntu中安装gcc和g++
  14. 解决chrome主页被hao123劫持的记录
  15. 使用 html5 显示导航路线 谷歌地图api
  16. pyinstaller 打包py文件 以及字体、图片等资源的引用
  17. matlab fcn模块矩阵例子,16.1 Fcn/Matlab Fcn模块
  18. 利用Nginx实现负载均衡(反向代理)完全详解
  19. DPDK igb/ixgbe/igb_uio bind ubind,网卡解绑
  20. NIKE旗下品牌JORDAN发力新零售, 瞄准了天猫小黑盒

热门文章

  1. Pandas 表连接(Merge,join,concatenate)
  2. 初识 NGINX 服务网格
  3. Veeam黑科技之Direct NFS Access
  4. 收藏一些常用下载地址
  5. 你应该知道的大数据领域12大动向
  6. 电脑排行榜笔记本_2019联想笔记本电脑排行榜
  7. php单击显示对应内容,关于php:如何单击此“提交”按钮,并使其显示原始查询中的数据,而不是清除它并进入空白页?...
  8. 解决设备行业尾款回收问题-深思精锐5时钟锁
  9. unity的inputField文本框赋值问题
  10. 如何创建一个Quartz.NET的工作,需要注射autofac