当前位置: 首页 > news >正文

曲靖网站微信建设自建网站平台 优帮云

曲靖网站微信建设,自建网站平台 优帮云,wordpress文章地图定位,公司网站建设文案基于订单批量支付场景,对策略模式和简单工厂模式进行简单实现 文章目录 策略模式介绍实现抽象策略具体策略1.AliPayStrategy2.WeChatPayStrategy 环境 使用简单工厂来获取具体策略对象支付方式枚举策略工厂接口策略工厂实现 测试使用订单实体类对订单进行批量支付结…

基于订单批量支付场景,对策略模式和简单工厂模式进行简单实现

文章目录

  • 策略模式
    • 介绍
    • 实现
      • 抽象策略
      • 具体策略
        • 1.AliPayStrategy
        • 2.WeChatPayStrategy
      • 环境
  • 使用简单工厂来获取具体策略对象
    • 支付方式枚举
    • 策略工厂接口
    • 策略工厂实现
  • 测试使用
    • 订单实体类
    • 对订单进行批量支付
    • 结果
  • 扩展一种支付方式:银行卡支付
    • 支付策略新增
    • 支付枚举新增
    • 工厂新增生产银行卡
    • 重新测试

策略模式

介绍

以下是菜鸟教程对策略模式的介绍: 策略模式

在策略模式定义了一系列算法或策略,并将每个算法封装在独立的类中,使得它们可以互相替换。通过使用策略模式,可以在运行时根据需要选择不同的算法,而不需要修改客户端代码。

策略模式主要有三个角色:

  • 抽象策略(Abstract Strategy):定义了策略对象的公共接口或抽象类,规定了具体策略类必须实现的方法。
  • 具体策略(Concrete Strategy):实现了抽象策略定义的接口或抽象类,包含了具体的算法实现。
  • 环境(Context):维护一个对策略对象的引用,负责将客户端请求委派给具体的策略对象执行。环境类可以通过依赖注入、简单工厂等方式来获取具体策略对象。

实现

抽象策略

我们使用接口来实现抽象策略,规定了支付的公共方法,根据传入的用户名和支付金额进行结算。

package knowledege.designPattern.strategy.test1;import java.math.BigDecimal;public interface PayStrategy {void pay(String name, BigDecimal money);
}

具体策略

初始化微信和支付宝两种支付策略

1.AliPayStrategy
package knowledege.designPattern.strategy.test1;import java.math.BigDecimal;public class AliPayStrategy implements PayStrategy{@Overridepublic void pay(String name, BigDecimal money) {System.out.println("[" +name+ "]使用支付宝支付..." + money + "元");}
}
2.WeChatPayStrategy
package knowledege.designPattern.strategy.test1;import java.math.BigDecimal;public class WeChatPayStrategy implements PayStrategy{@Overridepublic void pay(String name, BigDecimal money) {System.out.println("[" +name+ "]使用微信支付..." + money + "元");}
}

环境

提供设置策略和执行策略的方法

package knowledege.designPattern.strategy.test1;import java.math.BigDecimal;
public class PayContext {private PayStrategy payStrategy;public PayContext(){}public void setPayStrategy(PayStrategy payStrategy){this.payStrategy = payStrategy;}public void executePayStrategy(String name, BigDecimal money){payStrategy.pay(name, money);}
}

使用简单工厂来获取具体策略对象

支付方式枚举

定义枚举并支持静态根据支付方式获取枚举

package knowledege.designPattern.strategy.test1;import lombok.AllArgsConstructor;
import lombok.Getter;@Getter
@AllArgsConstructor
public enum PayWayEnum {PAY_ALI("01","支付宝"),PAY_WE_CHAT("02","微信");public final String payWay;public final String payDesc;public static PayWayEnum getEnumByWay(String payWay){for(PayWayEnum enums: PayWayEnum.values()){if(enums.payWay.equals(payWay)){return enums;}}return null;}
}

策略工厂接口


public interface StrategyFactory {PayStrategy initStrategy();
}

策略工厂实现

package knowledege.designPattern.strategy.test1;import java.util.Objects;public class StrategySimpleFactory {public static PayStrategy initStrategy(String payWay){PayWayEnum payWayEnum = PayWayEnum.getEnumByWay(payWay);if (Objects.isNull(payWayEnum)) {return null;}PayStrategy strategy = null;switch (payWayEnum) {case PAY_ALI:strategy = new AliPayStrategy();break;case PAY_WE_CHAT:strategy = new WeChatPayStrategy();break;}return strategy;}
}

测试使用

订单实体类

package knowledege.designPattern.strategy.test1;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import java.math.BigDecimal;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class OrderTestDTO {Integer orderNum;String payPersonName;String payWay;BigDecimal payMoney;
}

对订单进行批量支付

模拟对订单进行批量支付

  • 模拟获取一批订单
  • 循环订单进行支付
    • 根据订单的支付方式,获取支付枚举
    • 根据枚举,使用工厂模式获取支付策略
    • 根据策略,使用支付环境进行支付
package knowledege.designPattern.strategy.test1;import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;public class test1 {public static void main(String[] args) {List<OrderTestDTO> orderList = initOrders();batchPay(orderList);}/*** 获取订单*/public static  List<OrderTestDTO> initOrders(){List<OrderTestDTO> orderList = new ArrayList<>();orderList.add(new OrderTestDTO(1,"aaa","01",new BigDecimal("99")));orderList.add(new OrderTestDTO(2,"aaa","02",new BigDecimal("20")));orderList.add(new OrderTestDTO(3,"bbb","01",new BigDecimal("17")));orderList.add(new OrderTestDTO(4,"ccc","02",new BigDecimal("19.88")));return orderList;}/*** 订单批量支付*/public static void batchPay(List<OrderTestDTO> orderList){PayContext payContext = new PayContext();orderList.forEach( order -> {PayStrategy strategy = StrategySimpleFactory.initStrategy(order.getPayWay());payContext.setPayStrategy(strategy);payContext.executePayStrategy(order.getPayPersonName(), order.getPayMoney());});}
}

结果

可以看到每笔订单都成功根据其支付方式支付了。
在这里插入图片描述

扩展一种支付方式:银行卡支付

如果需要扩展一种支付方式,才能看出策略+工厂模式的真正优点。
下面我们模拟扩展一种支付方式:银行卡支付

支付策略新增

package knowledege.designPattern.strategy.test1;import java.math.BigDecimal;public class CardStrategy implements PayStrategy{@Overridepublic void pay(String name, BigDecimal money) {System.out.println("[" +name+ "]使用银行卡支付..." + money + "元");}
}

支付枚举新增

PAY_CARD("03","银行卡"),

工厂新增生产银行卡

            case PAY_CARD:strategy = new CardStrategy();break;

重新测试

在这里插入图片描述
成功适配了银行卡支付,改动较少,又没有更改核心的支付逻辑,符合开闭原则!

http://www.yayakq.cn/news/973800/

相关文章:

  • 建设公司网站有什么好处韩国美食网站建设目的
  • 网站建设活动策划方案怎么制作页面模板
  • 中国网站建设公司有哪些内容域名访问网站的知识
  • 开个网站需要什么模板网字体库
  • 微信公众号做的网站专业构建网站的公司
  • 厦门微信网站做的比较好的官方网站
  • 可视化网站建设怎么删除wordpress插件
  • 查询网站备案时间查询wordpress5.0代码执行
  • 企业建设网站是网络营销吗免费推广网站58
  • 风向 网站有没有给人做简历的网站
  • 哪里卖网站模板wordpress 企业插件
  • 建站视频网站分析论文
  • 广州 网站设计公司排名免费设计素材
  • 网站开发用哪种语言上海工商企业查询网
  • 抚州购物网站开发设计信阳网站建设策划方案
  • 培训机构网站设计中宁网站建设
  • 怎么看网站的外链网站建设美化
  • 东营网站建设制作网站的运营
  • 餐饮行业网站建设风格拱墅区建设局网站
  • 永康市住房和城乡建设局网站ftp更换网站
  • 神华集团两学一做网站网站安全建设管理制度
  • 浅蓝色.net企业网站源码带后台毕业设计ppt答辩模板
  • 网站管理基本内容网站建设公司的方案
  • 西安网站搜索引擎优化简约大气网站设计欣赏
  • 北京网站手机站建设公司电话号码seo排名需要多少钱
  • 网站建设 项目背景wordpress 2019主题谷歌字体
  • 塘厦仿做网站个人网页模板王
  • 网站建设哪家好网站建设哪家好网站建设哪家wordpress 中文 seo 插件
  • 长兴建设局网站公司网站建设的目的好处
  • 哈尔滨做网站找哪家好wordpress wti like post