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

基于spring的策略模式

集合spring框架的是策略模式,直接上代码

1、接口

public interface PaymentStrategy {
	
	//支付接口
    void pay(double amount);

}

2、实现类

2.1 实现类一
@Component("creditCard") //作为区分的标识
public class CreditCardPayment implements PaymentStrategy {//实现接口
    //重写的接口
    @Override
    public void pay(double amount) {
        System.out.println("Paid " + amount + " using Credit Card.");
    }

}
2.2 实现类一
@Component("creditCard") //作为区分的标识
public class PayPalPayment implements PaymentStrategy {//实现接口
    //重写的接口
    @Override
        public void pay(double amount) {
        System.out.println("Paid " + amount + " using PayPal.");
    }

}

3、工厂方法

//工厂方法
@Component
public class PaymentStrategyFactory {

	
    private final Map<String, PaymentStrategy> strategies;

	//自动字数管理映射
    @Autowired
    public PaymentStrategyFactory(Map<String, PaymentStrategy> strategies) {
        this.strategies = strategies;
    }

	//根据实现类的bean获取对应的实例
    public PaymentStrategy getStrategy(String strategyName) {
        return strategies.get(strategyName);
    }
}

4、应用层

    //  依赖注入
    private final PaymentStrategyFactory paymentStrategyFactory;

    @Autowired
    public LocalTest(PaymentStrategyFactory paymentStrategyFactory) {
        this.paymentStrategyFactory = paymentStrategyFactory;
    }
    @GetMapping("strategyTest")
    public String strategyTest(@RequestParam(value = "method") String method, 
                               @RequestParam(value = "amount") double amount) throws IOException {
        //获取对应的实例
        PaymentStrategy strategy = paymentStrategyFactory.getStrategy(method);
        if (strategy == null) {
            throw new RemoteException("Unknown payment method: "+method);
        }
        //运行
        strategy.pay(amount);
        return "Payment successful!";
    }

相关文章:

  • 【树莓派Pico设备驱动】-MAX7219驱动8位7段数码管(基于SPI)
  • 微信小程序地图map全方位解析
  • Vue实战【后端返回ArrayBuffer时,前端如何处理并成功下载ArrayBuffer文件】
  • Hive JOIN过滤条件位置玄学:ON vs WHERE的量子纠缠
  • c#编程:LINQ是什么?
  • 关于docker及容器的了解学习记录
  • 【 Avalonia UI 语言国际化 I18n】图文结合教学,保姆级教学,语言国际化就是这么简单(.Net C#)
  • 谷粒商城学习笔记-13-配置git-ssh-配置代码免密提交
  • 自然语言处理:第九十二章 chatBI 经验(转载)
  • ES6相关操作(2)
  • PHP集成软件用哪个比较好?
  • 41. 缺失的第一个正数(LeetCode 热题 100)
  • Linux高并发服务器开发 第十九天(线程 进程)
  • LeetCode热题100——滑动窗口/子串
  • dify安装
  • Linux中POSIX应用场景
  • 第4章 4.1 Entity Framework Core概述
  • 基于Java+Springboot+MySQL图书馆图书管理系统设计与实现
  • 力扣-回溯-39 组合总和
  • Python图像处理中的内存泄漏问题:原因、检测与解决方案
  • 二级网站建设标准/网络推广策划方案
  • 乐清市网站建设/上海搜索引擎优化公司排名
  • 为什么很少用python做网站/seo怎么刷关键词排名
  • 阿里巴巴上做网站要多少钱/最新热点新闻
  • 大学生建设网站/网站关键词seo优化公司
  • wordpress 添加内链/seo推广知识