设计模式-策略模式 Java

模式概述

策略模式是一种行为型设计模式,它通过定义一系列可互换的算法,并将每个算法封装成独立类,使客户端能够根据需要动态切换算法

简单代码示例

java 复制代码
// 1. 抽象策略接口
interface PaymentStrategy {
    void pay(int amount);
}

// 2. 具体策略实现
class CreditCardPayment implements PaymentStrategy {
    @Override
    public void pay(int amount) {
        System.out.println("信用卡支付: " + amount + "元");
    }
}

class AlipayPayment implements PaymentStrategy {
    @Override
    public void pay(int amount) {
        System.out.println("支付宝支付: " + amount + "元");
    }
}

// 3. 环境类(持有策略引用)
class PaymentContext {
    private PaymentStrategy strategy;

    public void setStrategy(PaymentStrategy strategy) {
        this.strategy = strategy;
    }

    public void executePayment(int amount) {
        strategy.pay(amount);
    }
}

// 客户端调用
public class Client {
    public static void main(String[] args) {
        PaymentContext context = new PaymentContext();
        
        // 动态切换策略
        context.setStrategy(new CreditCardPayment());
        context.executePayment(100);  // 输出:信用卡支付: 100元
        
        context.setStrategy(new AlipayPayment());
        context.executePayment(200); // 输出:支付宝支付: 200元
    }
}

技术细节

1.模式组成

组件 职责说明
抽象策略类 定义算法的公共接口,声明策略方法
具体策略类 实现抽象策略接口,提供具体算法实现
环境类 持有策略对象的引用,通过委托调用具体算法

2.优缺点

优点:

  • 符合开闭原则,新增策略无需修改已有代码
  • 避免多重条件判断(如if-else分支)
  • 算法复用,相同策略可被不同上下文使用

缺点:

  • 会产生大量小对象,增加系统复杂性
  • 多层装饰时调试困难

模式应用

事务管理(PlatformTransactionManager)

策略接口:

  • PlatformTransactionManager

具体策略:

  • DataSourceTransactionManager(JDBC事务)

  • JpaTransactionManager(JPA事务)

  • JtaTransactionManager(分布式事务)

相关推荐
董世昌418 小时前
什么是事件冒泡?如何阻止事件冒泡和浏览器默认事件?
java·前端
好度9 小时前
配置java标准环境?(详细教程)
java·开发语言
teacher伟大光荣且正确9 小时前
关于Qt QReadWriteLock(读写锁) 以及 QSettings 使用的问题
java·数据库·qt
nightseventhunit9 小时前
base64字符串String.getByte导致OOM Requested array size exceeds VM limit
java·oom
悟能不能悟9 小时前
java map判断是否有key,get(key)+x,否则put(key,x)的新写法
java·开发语言
webbodys9 小时前
Python文件操作与异常处理:构建健壮的应用程序
java·服务器·python
石工记9 小时前
对称加密 vs 非对称加密图解详解
java·网络安全
不急不躁12310 小时前
Android16 给应用默认获取权限
android·java
C雨后彩虹10 小时前
5G网络建设
java·数据结构·算法·华为·面试
码界奇点10 小时前
基于Spring Boot的后台管理系统设计与实现
java·spring boot·后端·车载系统·毕业设计·源代码管理