基于枚举实现策略设计模式
架构图
策略模式环境搭建
创建项目名称 springboot_ strategy Maven依赖信息
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.1.RELEASE</version> </parent> <dependencies> <!-- sprinboot web --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.10</version> </dependency> <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> <version>2.6</version> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.1.1</version> </dependency> <!-- mysql 依赖 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> </dependencies>
PayStrategy(抽象角色)
public interface PayStrategy { /** * 共同算法实现骨架 * @return */ public String toPayHtml(); }
ConcreteStrategy (具体实现角色)
@Component public class AliPayStrategy implements PayStrategy { public String toPayHtml() { return "调用支付宝支付接口"; } } @Component public class XiaoMiPayStrategy implements PayStrategy { public String toPayHtml() { return "调用小米支付接口"; } }
PayChannelEumn
public enum PayChannelEumn { ALI_PAY("ali_pay"), XIAOMI_PAY("xiaomi_pay"),; private String payCode; PayChannelEumn(String payCode) { this.payCode = payCode; } public String getPayCode() { return this.payCode; } }
ChannelHandler
@Component public class ChannelHandler { private static Map<String, PayStrategy> map = new ConcurrentHashMap<>(); @Autowired private AliPayStrategy aliPayStrategy; @Autowired private XiaoMiPayStrategy xiaoMiPayStrategy; @PostConstruct public void init() { map.put(PayChannelEumn.ALI_PAY.getPayCode(), aliPayStrategy); map.put(PayChannelEumn.XIAOMI_PAY.getPayCode(), xiaoMiPayStrategy); } public PayStrategy getHandler(String payCode) { return map.get(payCode); } }
PayContextServiceCopy (上下文)
@RestController public class PayContextServiceCopy { @Autowired private ChannelHandler channelHandler; @RequestMapping("/payHtml") public String toPayHtml(String payCode) { // 1.验证参数 if (StringUtils.isEmpty(payCode)) { return "payCode不能为空!"; } // 2.使用PayCode查询 PayStrategy handler = channelHandler.getHandler(payCode); if (handler == null) { return "该渠道为空..."; } return handler.toPayHtml(); } }
启动类
@SpringBootApplication(scanBasePackages = {"com.mayikt.designers"}) public class StrategyApp { public static void main(String[] args) { SpringApplication.run(StrategyApp.class, args); } }
Yml
server: servlet: context-path: / port: 8088 spring: application: name: utils datasource: url: jdbc:mysql://localhost:3306/designers?characterEncoding=UTF-8 username: root password: root driver-class-name: com.mysql.jdbc.Driver
测试
localhost:8088/payHtml?payCode=ali_pay
下一篇:
Pytorch预训练模型加载