12、(行为型设计模式)Java 策略模式深度学习指南

【34】软考软件设计师——设计模式代码填空(Java版)满分精讲|下午第5/6题二选一必考 本文是《软件设计师·50讲通关|从零基础到工程师职称》专栏第34篇,聚焦下午大题**第5/6题二选一核心考点——Java版设计模式代码填空**,单题分值稳定12~15分,是拿下代码大题的关键得分点。全文超4000字,深度精讲软考Java代码填空五大高频模式:单例模式、工厂模式(简单工厂+抽象工厂)、策略模式、观察者模式、适配器模式;拆解UML类图与Java代码的精准映射规则,标注每一处高频填空考点,配套可直接默写的标准Java模板、经典填空真题、易错点位标记 阅读详情

以下是为你精心撰写的 《Java 策略模式深度学习指南》,专为 Java 后端开发者打造,内容涵盖:定义、作用、真实业务场景、实现方式对比、Spring 集成、避坑指南、最佳实践、面试高频题,所有示例均含中文注释,可直接用于项目重构、性能优化与面试备战。


📘 Java 策略模式深度学习指南

—— 从“if-else地狱”到“动态算法切换”的架构革命

作者:Java 后端架构实战导师
适用对象:Java 后端开发者(Spring Boot / 微服务 / 分布式系统)
目标:彻底摆脱“if-else 多层嵌套”,掌握行为可插拔、可热替换的策略模式
核心原则:“封装变化的行为,让客户端在运行时动态选择”


✅ 一、什么是策略模式?

📌 定义:

策略模式(Strategy Pattern) 是一种行为型设计模式,它定义了一系列算法或行为,并将每一个算法封装在独立的类中,使它们可以相互替换,且客户端可以在运行时动态选择使用哪一个策略。

🔍 核心思想:

  • 把变化的行为(如折扣计算、排序方式、路由策略)独立成接口
  • 每个具体实现是一个策略类
  • 客户端通过上下文(Context) 动态设置策略,无需修改代码
  • 策略之间互不依赖,可自由组合、替换

💡 一句话记忆:
“我要一个结果,但不关心你用什么方法算,你(策略)自己决定怎么算。”

🆚 对比工厂方法 vs 策略模式:

模式工厂方法策略模式
目的创建对象执行行为
关注点“谁来造?”“怎么干?”
客户端调用factory.create()context.execute()
典型场景支付方式创建支付方式计算折扣
本质创建型模式行为型模式

✅ 举个生活例子:
你去超市结账,收银员问:“您是会员吗?”

  • 如果是 → 打 9 折(策略A)
  • 如果不是 → 原价(策略B)
  • 如果是VIP → 打 8 折(策略C)

收银员 = 上下文,折扣算法 = 策略,你选哪种身份 = 动态切换策略


✅ 二、策略模式有什么作用?(Why Use Strategy Pattern?)

作用说明
✅ 消除 if-else 多层嵌套代码结构清晰,可读性大幅提升
✅ 支持开闭原则(OCP)新增策略只需新增类,无需修改原有逻辑
✅ 行为可动态切换运行时根据配置、用户角色、环境切换算法
✅ 提高可测试性每个策略可独立单元测试
✅ 便于复用和扩展策略可在多个上下文中复用(如订单、购物车、推荐)
✅ 解耦业务逻辑与实现客户端只关心“做什么”,不关心“怎么做”
✅ 支持组合与链式调用可组合多个策略实现复杂逻辑

💡 经典名言:
“If you find yourself writing a lot of if-else statements to choose between different algorithms, you probably need the Strategy pattern.”
——《Head First Design Patterns》


✅ 三、策略模式的典型使用场景(Java 后端真实案例)

场景说明是否推荐使用策略模式
✅ 折扣计算普通用户、会员、VIP、满减、限时折扣✅ 强烈推荐
✅ 排序算法按价格、按销量、按评分、按时间✅ 推荐
✅ 支付方式支付宝、微信、银行卡、Apple Pay 的手续费计算✅ 推荐
✅ 路由策略短信发送通道(阿里云、腾讯云、自建)✅ 推荐
✅ 缓存策略本地缓存、Redis、多级缓存加载顺序✅ 推荐
✅ 风控规则黑名单、频率限制、设备指纹、IP 地域判断✅ 推荐
✅ 日志格式化JSON、XML、Text、ELK 格式输出✅ 推荐
✅ 文件解析器CSV、Excel、JSON、PDF 解析✅ 推荐
✅ 消息序列化JSON、Protobuf、Hessian、Kryo✅ 推荐
❌ 简单工具类(如 StringUtils.isEmpty())无状态、无变化❌ 不推荐
❌ 对象创建(如 new User())应该用工厂模式❌ 不推荐

✅ 判断标准:
“同一个接口,多个实现,运行时根据条件动态切换?”
→ 是 → 用策略模式!


✅ 四、策略模式的四种实现方式详解(含中文注释)

我们从基础结构到Spring 注解驱动,逐步深入。


🔹 1. 基础结构:接口 + 多个实现类 + 上下文

/**
 * 【1】策略接口:定义统一的行为契约
 */
interface DiscountStrategy {
    double calculate(double originalPrice); // 计算最终价格
}

/**
 * 【2】具体策略1:无折扣
 */
class NoDiscount implements DiscountStrategy {
    @Override
    public double calculate(double originalPrice) {
        System.out.println("📉 无折扣:原价 " + originalPrice);
        return originalPrice;
    }
}

/**
 * 【3】具体策略2:8折优惠
 */
class EightyPercentDiscount implements DiscountStrategy {
    @Override
    public double calculate(double originalPrice) {
        System.out.println("🎁 8折优惠:原价 " + originalPrice + " → " + (originalPrice * 0.8));
        return originalPrice * 0.8;
    }
}

/**
 * 【4】具体策略3:满100减20
 */
class FullReductionDiscount implements DiscountStrategy {
    private final double fullAmount;   // 满额
    private final double reduceAmount; // 减额

    public FullReductionDiscount(double fullAmount, double reduceAmount) {
        this.fullAmount = fullAmount;
        this.reduceAmount = reduceAmount;
    }

    @Override
    public double calculate(double originalPrice) {
        if (originalPrice >= fullAmount) {
            double finalPrice = originalPrice - reduceAmount;
            System.out.println("🎉 满" + fullAmount + "减" + reduceAmount + ":原价 " + originalPrice + " → " + finalPrice);
            return finalPrice;
        } else {
            System.out.println("❌ 不满足满减条件,原价 " + originalPrice);
            return originalPrice;
        }
    }
}

/**
 * 【5】上下文(Context):持有策略,提供统一调用入口
 */
class PriceCalculator {
    private DiscountStrategy strategy; // 持有策略对象

    // 设置策略(运行时动态切换)
    public void setStrategy(DiscountStrategy strategy) {
        this.strategy = strategy;
    }

    // 执行计算(客户端调用)
    public double calculatePrice(double originalPrice) {
        if (strategy == null) {
            throw new IllegalStateException("请先设置折扣策略");
        }
        return strategy.calculate(originalPrice);
    }
}

/**
 * 【6】客户端:使用策略
 */
public class StrategyDemo {
    public static void main(String[] args) {
        PriceCalculator calculator = new PriceCalculator();

        // 场景1:普通用户(无折扣)
        calculator.setStrategy(new NoDiscount());
        double price1 = calculator.calculatePrice(100.0);
        System.out.println("最终价格:" + price1 + "\n");

        // 场景2:会员用户(8折)
        calculator.setStrategy(new EightyPercentDiscount());
        double price2 = calculator.calculatePrice(100.0);
        System.out.println("最终价格:" + price2 + "\n");

        // 场景3:VIP用户(满100减20)
        calculator.setStrategy(new FullReductionDiscount(100, 20));
        double price3 = calculator.calculatePrice(120.0);
        System.out.println("最终价格:" + price3 + "\n");

        // 输出:
        // 📉 无折扣:原价 100.0
        // 最终价格:100.0
        //
        // 🎁 8折优惠:原价 100.0 → 80.0
        // 最终价格:80.0
        //
        // 🎉 满100减20:原价 120.0 → 100.0
        // 最终价格:100.0
    }
}
✅ 优点:
  • 完全解耦:客户端不知道具体折扣类
  • 易扩展:新增“满200减50”只需新增类
  • 易测试:每个策略可独立单元测试
⚠️ 缺点:
  • 策略类过多时,代码文件膨胀
  • 客户端仍需知道策略类名(可优化)

🔹 2. 策略模式 + Map + 配置驱动(推荐企业级写法)

使用 Map<String, DiscountStrategy> 实现配置驱动、热切换

import java.util.HashMap;
import java.util.Map;

/**
 * 【1】策略接口(同上)
 */
interface DiscountStrategy {
    double calculate(double originalPrice);
}

// 具体策略类(同上)
class NoDiscount implements DiscountStrategy {
    @Override
    public double calculate(double originalPrice) {
        return originalPrice;
    }
}

class EightyPercentDiscount implements DiscountStrategy {
    @Override
    public double calculate(double originalPrice) {
        return originalPrice * 0.8;
    }
}

class FullReductionDiscount implements DiscountStrategy {
    private final double fullAmount;
    private final double reduceAmount;

    public FullReductionDiscount(double fullAmount, double reduceAmount) {
        this.fullAmount = fullAmount;
        this.reduceAmount = reduceAmount;
    }

    @Override
    public double calculate(double originalPrice) {
        return originalPrice >= fullAmount ? originalPrice - reduceAmount : originalPrice;
    }
}

/**
 * 【2】策略注册表:使用 Map 存储策略,支持动态注册
 */
class DiscountStrategyRegistry {
    // 策略注册表(策略名 -> 策略实例)
    private static final Map<String, DiscountStrategy> strategyMap = new HashMap<>();

    // 静态初始化:注册所有策略(可从配置文件或数据库加载)
    static {
        strategyMap.put("no", new NoDiscount());
        strategyMap.put("80", new EightyPercentDiscount());
        strategyMap.put("full100-20", new FullReductionDiscount(100, 20));
        strategyMap.put("full200-50", new FullReductionDiscount(200, 50));
    }

    /**
     * 根据策略名称获取策略实例
     */
    public static DiscountStrategy getStrategy(String strategyName) {
        DiscountStrategy strategy = strategyMap.get(strategyName);
        if (strategy == null) {
            throw new IllegalArgumentException("未知折扣策略:" + strategyName);
        }
        return strategy;
    }
}

/**
 * 【3】上下文(Context):简化调用
 */
class PriceCalculator {
    public double calculatePrice(double originalPrice, String strategyName) {
        DiscountStrategy strategy = DiscountStrategyRegistry.getStrategy(strategyName);
        return strategy.calculate(originalPrice);
    }
}

/**
 * 【4】客户端:极简调用,完全配置驱动
 */
public class RegistryStrategyDemo {
    public static void main(String[] args) {
        PriceCalculator calculator = new PriceCalculator();

        // 从配置文件、数据库、用户身份读取策略名
        String userLevel = "80"; // 假设用户是会员
        double price = calculator.calculatePrice(100.0, userLevel);
        System.out.println("会员价:" + price); // 输出:80.0

        String vipLevel = "full100-20";
        price = calculator.calculatePrice(120.0, vipLevel);
        System.out.println("VIP价:" + price); // 输出:100.0

        // ✅ 新增策略:只需在静态块添加一行,无需改任何业务代码!
    }
}
✅ 优点:
  • 客户端完全不知道策略类名
  • 新增策略只需在 strategyMap 注册
  • 支持从数据库或配置中心动态加载
  • 完美支持热部署
💡 企业级推荐:

在 Spring 中,用 @Component + @Order + Map<String, DiscountStrategy> 自动注入,实现自动注册!


🔹 3. 策略模式 + Spring 注解驱动(最推荐的生产级写法)

Spring 容器自动扫描所有策略,注入到 Map,零配置、零注册、零耦合

/**
 * 【1】策略接口
 */
public interface DiscountStrategy {
    double calculate(double originalPrice);
    String getStrategyType(); // 标识策略类型,用于注册
}

/**
 * 【2】具体策略1:无折扣
 */
@Component
@Order(1)
public class NoDiscount implements DiscountStrategy {
    @Override
    public double calculate(double originalPrice) {
        return originalPrice;
    }

    @Override
    public String getStrategyType() {
        return "no"; // 策略标识
    }
}

/**
 * 【3】具体策略2:8折优惠
 */
@Component
@Order(2)
public class EightyPercentDiscount implements DiscountStrategy {
    @Override
    public double calculate(double originalPrice) {
        return originalPrice * 0.8;
    }

    @Override
    public String getStrategyType() {
        return "80";
    }
}

/**
 * 【4】具体策略3:满100减20
 */
@Component
@Order(3)
public class FullReductionDiscount implements DiscountStrategy {
    private final double fullAmount = 100;
    private final double reduceAmount = 20;

    @Override
    public double calculate(double originalPrice) {
        return originalPrice >= fullAmount ? originalPrice - reduceAmount : originalPrice;
    }

    @Override
    public String getStrategyType() {
        return "full100-20";
    }
}

/**
 * 【5】策略工厂(Spring 管理):自动注入所有策略
 */
@Service
public class DiscountStrategyFactory {

    @Autowired
    private List<DiscountStrategy> strategies; // ✅ Spring 自动注入所有实现类

    // 构建策略 Map:策略类型 → 策略实例
    private final Map<String, DiscountStrategy> strategyMap = new HashMap<>();

    @PostConstruct // Spring 启动后自动执行
    public void init() {
        for (DiscountStrategy strategy : strategies) {
            strategyMap.put(strategy.getStrategyType(), strategy);
        }
        System.out.println("✅ 策略注册完成,共加载 " + strategyMap.size() + " 种折扣策略");
    }

    /**
     * 根据类型获取策略
     */
    public DiscountStrategy getStrategy(String type) {
        DiscountStrategy strategy = strategyMap.get(type);
        if (strategy == null) {
            throw new IllegalArgumentException("未找到策略类型:" + type);
        }
        return strategy;
    }
}

/**
 * 【6】服务层:调用策略
 */
@Service
public class OrderService {

    @Autowired
    private DiscountStrategyFactory strategyFactory;

    /**
     * 根据用户等级计算最终价格
     */
    public double calculateFinalPrice(double originalPrice, String userLevel) {
        DiscountStrategy strategy = strategyFactory.getStrategy(userLevel);
        return strategy.calculate(originalPrice);
    }
}

/**
 * 【7】配置文件:application.yml
 */
/*
payment:
  discount:
    default: "no"  # 默认策略
*/

/**
 * 【8】控制器:API 调用示例
 */
@RestController
@RequestMapping("/api/order")
public class OrderController {

    @Autowired
    private OrderService orderService;

    @GetMapping("/price")
    public double getPrice(@RequestParam double amount, @RequestParam String level) {
        return orderService.calculateFinalPrice(amount, level);
    }
}

/**
 * 【9】启动类测试
 */
@SpringBootApplication
public class SpringStrategyDemo {
    public static void main(String[] args) {
        ApplicationContext context = SpringApplication.run(SpringStrategyDemo.class, args);
        OrderService service = context.getBean(OrderService.class);

        // 测试
        System.out.println("普通价:" + service.calculateFinalPrice(100, "no"));       // 100.0
        System.out.println("会员价:" + service.calculateFinalPrice(100, "80"));       // 80.0
        System.out.println("VIP价:" + service.calculateFinalPrice(120, "full100-20")); // 100.0
    }
}
✅ 优点:
  • 零配置注册:所有 @Component 自动被 Spring 扫描
  • 自动注入:List<DiscountStrategy> 自动收集所有实现
  • 热部署:修改策略无需重启(配合 Spring Boot Actuator)
  • 类型安全:编译期检查策略类型
  • 支持 @Order 控制优先级(如多个策略匹配时)
💡 Spring 的精髓:

“你写策略,Spring 帮你注册;你调用,Spring 帮你查找。”

✅ 你每天都在用:

  • List<MessageConverter>
  • List<HandlerInterceptor>
  • List<AuthenticationProvider>
    → 都是策略模式 + Spring 自动装配的体现!

🔹 4. 策略模式 + Lambda + 函数式接口(现代 Java 最优雅写法)

用 Function<Double, Double> 替代策略类,一行代码定义策略

import java.util.HashMap;
import java.util.Map;
import java.util.function.Function;

/**
 * 【1】策略接口(函数式接口)
 */
interface DiscountFunction extends Function<Double, Double> {}

/**
 * 【2】策略注册表(使用 Lambda 表达式)
 */
class DiscountRegistry {
    private static final Map<String, DiscountFunction> strategyMap = new HashMap<>();

    static {
        // 无折扣
        strategyMap.put("no", price -> price);

        // 8折
        strategyMap.put("80", price -> price * 0.8);

        // 满100减20
        strategyMap.put("full100-20", price -> price >= 100 ? price - 20 : price);

        // 满200减50
        strategyMap.put("full200-50", price -> price >= 200 ? price - 50 : price);

        // 更复杂的策略:会员+满减组合
        strategyMap.put("vip-combo", price -> {
            if (price >= 200) return price * 0.7; // VIP 7折
            if (price >= 100) return price * 0.85; // VIP 85折
            return price;
        });
    }

    public static DiscountFunction getStrategy(String type) {
        DiscountFunction strategy = strategyMap.get(type);
        if (strategy == null) {
            throw new IllegalArgumentException("未知策略:" + type);
        }
        return strategy;
    }
}

/**
 * 【3】上下文
 */
class PriceCalculator {
    public double calculate(double originalPrice, String strategyType) {
        return DiscountRegistry.getStrategy(strategyType).apply(originalPrice);
    }
}

/**
 * 【4】客户端:极简调用
 */
public class LambdaStrategyDemo {
    public static void main(String[] args) {
        PriceCalculator calculator = new PriceCalculator();

        System.out.println("普通价:" + calculator.calculate(100, "no"));         // 100.0
        System.out.println("会员价:" + calculator.calculate(100, "80"));         // 80.0
        System.out.println("VIP价:" + calculator.calculate(120, "full100-20"));  // 100.0
        System.out.println("组合价:" + calculator.calculate(250, "vip-combo"));   // 175.0(250 * 0.7)

        // ✅ 新增策略:一行 Lambda,无需新建类!
    }
}
✅ 优点:
  • 极致简洁:无需类,一行代码定义策略
  • 函数式编程风格:现代 Java 推荐写法
  • 适合简单策略:逻辑不复杂时首选
⚠️ 缺点:
  • 策略逻辑复杂时,Lambda 可读性差
  • 无法复用、无法单元测试(除非封装成方法)
  • 不支持参数化(如满减金额)
💡 建议:

简单策略用 Lambda,复杂策略用类 + Spring


✅ 五、策略模式的避坑指南(Java 后端高频踩坑)

问题原因解决方案
❌ 用 if-else 判断策略代码臃肿,违反开闭原则✅ 改为策略模式 + Map 注册
❌ 策略类没有统一接口客户端无法统一调用✅ 所有策略实现同一接口
❌ 策略类中包含业务状态导致状态混乱✅ 策略应为无状态对象(Stateless)
❌ 策略命名混乱Discount1, Discount2 不可读✅ 使用语义化名称:full100-20, vip-70
❌ Spring 中忘记加 @Component策略未被扫描✅ 检查包扫描路径,加 @Component
❌ 多个策略匹配时无优先级顺序不可控✅ 用 @Order 注解控制加载顺序
❌ 策略依赖外部服务如数据库查询✅ 策略应轻量,依赖注入到策略类中

✅ 六、策略模式 vs 工厂方法 vs 状态模式 对比

模式目的关键词举例
工厂方法创建对象“谁来造?”PaymentFactory.create("alipay")
策略模式执行行为“怎么干?”discountStrategy.calculate(price)
状态模式改变行为“当前状态?”order.getState().next()

✅ 一句话区分:

  • 工厂方法:创建不同对象
  • 策略模式:调用不同方法
  • 状态模式:对象自身行为随状态改变

💡 实际组合:
你用工厂方法创建一个 DiscountStrategy,
用策略模式执行它的 calculate() 方法,
用状态模式管理 Order 的 status,
→ 三者完美配合!


✅ 七、学习建议与进阶路径

阶段建议
📚 第一周将你项目中的 if-else 折扣逻辑,重构为策略模式(至少3种策略)
📚 第二周用 Spring + @Component + List<DiscountStrategy> 实现自动注册
📚 第三周用 Lambda 重构简单策略(如排序、路由)
📚 第四周阅读 Spring 源码:HandlerMapping、MessageConverter 如何实现策略模式?
📚 面试准备准备回答:

“你项目中哪里用了策略模式?”
“Spring 中如何实现策略自动注册?”
“策略模式和工厂方法区别?”
“策略模式能用 Lambda 替代吗?” |


✅ 八、策略模式面试高频题(附答案)

Q1:策略模式解决了什么问题?

A:解决了“算法或行为多变”导致的 if-else 嵌套问题,让行为可插拔、可替换。

Q2:策略模式和工厂方法有什么区别?

A:

  • 工厂方法:创建对象(创建支付宝/微信支付对象)
  • 策略模式:执行行为(执行8折/满减计算)
    → 一个管“造”,一个管“用”

Q3:Spring 中如何实现策略自动注册?

A:使用 @Component 标记策略类,注入 List<Strategy>,Spring 自动收集所有实现类并注入。

Q4:策略模式是否必须用接口?

A:不是必须,但强烈推荐。接口保证了统一契约,便于扩展和测试。

Q5:策略模式能用 Lambda 替代吗?

A:能!适用于简单、无状态、逻辑短小的策略。复杂策略仍建议用类实现。

Q6:策略模式和状态模式有什么关系?

A:

  • 策略模式:客户端选择策略
  • 状态模式:对象内部状态决定行为
    → 本质都是“行为可变”,但控制权不同

✅ 九、总结:策略模式选型决策树

graph TD
    A[是否需要动态切换算法?] --> B{算法是否简单?}
    B -->|是| C[使用 Lambda 表达式]
    B -->|否| D{是否在 Spring 项目中?}
    D -->|是| E[使用 @Component + List<Strategy> 自动注册]
    D -->|否| F[使用 Map<String, Strategy> 手动注册]

✅ 最终推荐:

  • Spring 项目 → ✅ @Component + List + @Order(最优雅)
  • 非 Spring、简单策略 → ✅ Lambda(最简洁)
  • 非 Spring、复杂策略 → ✅ 接口 + Map + 注册表(最标准)
  • 绝对不要:if-else、switch-case、硬编码

✅ 十、结语:真正的高手,不写 if-else,而写策略

你不是在学“策略模式”,你是在学“如何让系统不因需求变化而崩溃”。

✅ 当你看到 @Autowired List<PaymentStrategy> strategies 时,你已经站在了架构设计的高地上。
✅ 当你用 application.yml 切换风控策略而不重启服务时,你已经掌握了动态配置的艺术。

不要为了“用模式”而用模式,
要为了“系统可扩展、可维护、可配置”而选择它。


科研智能体平台搭建与实战:大模型如何驱动科研自动化 大模型技术的快速发展,正推动AI智能体从单纯对话工具向主动执行任务的科研伙伴演进。智能体的核心原理在于整合模型调用、工具使用、知识库检索与工作流编排,使其能够自主拆解目标、执行操作并迭代优化。在科研场景中,这一技术价值尤为突出:文献初筛、实验数据清洗、代码调试、结果汇总等高频重复劳动均可实现自动化,大幅释放研究者精力。从基础组件配置到多智能体协同,从平台选型到提示词调优,实际落地需要关注模型匹配、工具稳定性、记忆管理与人机校验机制。本文基于真实工程经验,系统梳理科研智能体平台的搭建路径、应用案例与高频问题排 阅读详情

相关推荐

高速SerDes均衡技术解析

均衡技术是高速SerDes链路中补偿信道损耗和失真的核心技术,通过FFE、CTLE和DFE三种主要方法对抗码间干扰(ISI)。FFE在发射端预补偿前光标干扰,CTLE通过提升高频增益补偿信道损耗,DFE则精准消除后光标干扰。三种技术各具优势:FFE实现简单且不放大噪声,CTLE功耗低易于集成,DFE能自适应调整且保持信噪比。这些技术协同工作可有效提升系统传输速率和可靠性。

一只豌豆象的博客 1945

13、(行为型设计模式)Java 模板方法模式深度学习指南

《Java模板方法模式深度学习指南》摘要: 本文深入讲解Java模板方法模式,适合后端开发者处理订单流程、审批流等业务场景。该模式通过定义算法骨架(父类)和可重写步骤(子类),实现"固定流程,灵活实现"的架构设计。文章对比了模板方法与策略模式的区别,分析了适用场景(如订单处理、数据导入等),并提供了三种实现方式:基础抽象类、Spring集成和Lambda表达式。指南包含中文注释示例,涵盖核心思想、作用、最佳实践及面试高频题,帮助开发者避免代码重复、强制流程规范,提高可维护性。关键区别在于

python15397的博客 944

【Spreadsheet】香港规范结构设计电子表格库开发方案

深入理解香港本地规范特点和要求结合国际先进标准(Eurocode) 的技术内容考虑香港地理环境特殊性 (台风、地质等)建立完善的质量控制体系保持持续更新维护的能力。

hmywillstronger的博客 1361

16、(行为型设计模式)Java 命令模式深度学习指南

Java命令模式深度学习指南摘要 本文深入探讨Java命令模式,专为后端开发者设计,涵盖定义、作用、与策略模式对比、应用场景及实现方式。命令模式通过封装请求为对象,实现操作参数化、排队、撤销和日志记录,适用于订单回滚、审计日志、任务队列等场景。文章详细解析经典实现(命令/调用者/接收者)、Spring Task和Kafka集成,并提供撤销/重做功能实现方案。同时包含避坑指南、最佳实践和面试常问题目,所有代码示例均含中文注释。核心价值在于解耦请求发送与执行,支持异步处理、操作回滚和系统审计,是构建健壮后端系统

python15397的博客 756

SLAM轨迹评估神器evo实战:从GPS到TUM格式的完整转换指南(附Python代码)

本文详细介绍了如何使用evo工具将GPS数据转换为TUM格式,以便进行SLAM轨迹评估。通过Python代码实现GPS到笛卡尔坐标的精确转换,并提供了完整的处理流程和实战案例,帮助开发者轻松完成从原始GPS数据到精确轨迹评估的全过程。特别适用于ORB-SLAM等视觉SLAM算法的性能验证。

weixin_29074295的博客 292

小智AI MCP协议实战:从语音指令到设备响应的完整链路拆解

本文深入拆解了小智AI MCP协议在智能语音交互中的完整工作流程。通过一个“调节音量”的真实场景,详细阐述了从语音采集、云端AI意图理解与决策,到MCP协议下的工具调用、设备端执行,最终完成语音反馈的每一个技术环节。文章重点分析了MCP协议如何通过标准化的交互模型,解决AI意图与设备控制间的“最后一公里”通信难题,实现高效可靠的设备响应。

defi6farmer的博客 247

17、(行为型设计模式)Java 状态模式深度学习指南

《Java 状态模式深度学习指南》摘要 本文系统讲解状态模式在Java开发中的应用,帮助开发者摆脱if-else状态判断困境。核心要点: 定义:允许对象在内部状态改变时自动切换行为,将状态封装为独立类 作用:消除条件判断、支持开闭原则、提高可维护性,特别适合订单系统、审批流程等场景 实现方式: 基础结构(状态接口+具体状态类+上下文) 结合Spring框架 集成状态机引擎 典型场景:订单状态流转、审批流程、工单系统等具有明确状态转换规则的业务 最佳实践:状态转换由状态类自身控制,避免外部逻辑判断 文含完整代

python15397的博客 753

[nlp] 自然语言理解基准 ATIS Snips

ATIS 4k 21 Intents(not include UNK) 120 SlotsSNIPS 13k 7 Intents(not include UNK) 72 SlotsATIS Benchmark (Intent Detection) | Papers With CodeSNIPS Benchmark (Intent Detection) | Papers With Code

心宝的博客 746

15、(行为型设计模式)Java 责任链模式深度学习指南

《Java责任链模式核心摘要》 模式本质:解耦请求与处理,允许多对象按链式顺序处理请求,适用于权限校验、日志拦截、API网关等场景。 核心优势: ✅ 消除嵌套if-else ✅ 动态扩展处理器 ✅ 灵活调整执行顺序 ✅ 支持处理中断(如黑名单拦截) 典型实现对比: 手写经典版:定义处理器接口+抽象类,通过setNext()构建链 Spring集成: Filter:适合HTTP请求预处理(编码/CORS) AOP:基于注解实现业务逻辑拦截 Spring Gateway:内置过滤器链(路由/限流) 避坑指南:

python15397的博客 680

MATLAB基础应用精讲-【数模应用】数字预失真(DPD)(附MATLAB代码实现)

近年来,随着无线通信技术的发展,高功率放大器 (PA) 在提高信号传输功率的同时,也带来了非线性失真问题。PA的非线性失真会造成信号频谱扩展、功率下降、邻道干扰等问题,严重影响系统性能。为了克服PA的非线性失真,数字预失真 (DPD) 技术应运而生。DPD技术通过在发射机中引入一个非线性模块,对信号进行预失真处理,从而补偿PA的非线性失真。

qq_36130719的博客 895

YOLO26剪枝 lamp剪枝测试精度仅掉0.7个点,速度提高11.8fps!

针对没有如何去选择剪枝的内容LAMP是层自适应幅度调整剪枝,无需任何参数,通过算法内部自己计算每个层的重要程度进行剪枝。基于权重重要程度和该层权重大小关系,权重越大表明该层越重要的思想进行优化。这个跟我前面说的非结构化全局剪枝是一个解法(MP),也就是lamp是在我前面那个非结构化剪枝的基础上进行优化的。但是这个逐层进行非结构剪枝目前还没有一个清晰的概念,确定每个层要剪枝多少。LAMP得分是一个平方权重大小,由层中所有“幸存权重”的总和归一化。

m0_64661770的博客 673

5、(创建型设计模式)Java 工厂方法模式深度学习指南

📘 Java 工厂方法模式深度学习指南(摘要) 本文系统讲解工厂方法模式在Java开发中的核心应用,涵盖定义、作用、典型场景及实现方式。工厂方法通过将对象创建延迟到子类,实现开闭原则和解耦设计,特别适用于支付系统、日志处理等多实现场景。指南详细对比了简单工厂与工厂方法的区别,提供四种实现方案(含Spring集成),重点演示了"支付系统"案例,展示如何通过抽象工厂+具体工厂实现灵活扩展。文中所有示例均含中文注释,可直接用于项目开发,帮助开发者避免硬编码,提升代码可维护性和可测试性。最后还

python15397的博客 676

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

java设计模式深度理解分析

java23种设计模式 创建型模式 单例模式 抽象工厂模式 原型模式 建造者模式 工厂模式 结构性模式 结构性模式 适配器模式 桥接模式 装饰模式 组合模式 外观模式 享元模式 代理模式 行为型模式 模板方法模式 命令模式 访问者模式 迭代器模式 观察者模式 中介者模式 备忘录模式 解释器模式 状态模式 10.策略模式 11.责任链模式 ...

qq_43917601的博客 1275

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

从设计模式到深度学习的思维转变

在策略模式里,每个策略都是人为写好的类,逻辑完全可见。而 AI 模型的“策略”是隐式的:它们不是 Java 类,而是神经网络权重矩阵里的数值分布训练时,模型通过梯度下降学到无数微小的决策规则这些“规则”不会以StrategyAStrategyB的形式存在类比策略模式:有三位厨师(StrategyA/B/C),你选一个做菜。AI 模型:只有一个厨师,他脑子里装了全世界的菜谱,还会即兴创作。

jj1245_的博客 445

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

各类设计模式对比与Spring设计模式的总结

分类 设计模式 创建型 工厂方法模式(Factory Method)、抽象工厂模式(Abstract Factory)、建造者模式(Builder)、原型模式(Prototype)、单例模式(Singleton) 结构型 适配器模式(Adapter)、桥接模式(Bridge)、组合模式(Composite)、装饰器模式...

yakax的博客 289

设计模式总结

设计模式是一门艺术 从出生元婴 二十加冕、三十而立 四十不惑、五十知天命 六十花甲、七十古稀不逾矩 设计模式来源于生活 GOF23种设计模式: 创建型:工厂方法模式、抽象工厂模式。建造者模式,原型模式 、单列模式 结构型:适配器模式、桥接模式、组合模式、装饰器模式、门面模式、代理模式 行为型:解释器模式、策略模式、观察者模式、命令模式。模板方法模式、责任链模式 装饰者和代理 策略和模板 代理和委派...

qq_34665775的博客 114

十四、策略模式——你要黄焖鸡、手撕鸡、大盘鸡、叫花鸡都可以,指定一个吧

策略模式(Strategy Design Pattern)通过定义一类算法族,让这样类可以相互替换,将算法抽取后根据需要搭配使用不同的算法。

EndlessProcess的专栏 710

Java面试宝典:从SiameseAOE模型源码看设计模式应用

本文介绍了如何在星图GPU平台上自动化部署SiameseAOE通用属性观点抽取-中文-base镜像,该镜像可用于中文文本的属性与观点抽取任务。通过该平台,用户能快速搭建并运行这一信息抽取模型,典型应用场景包括自动化分析电商评论、社交媒体内容,以提取用户对产品特性的评价观点,辅助市场调研与舆情分析。

weixin_28487725的博客 87

Spring介绍及设计模式

Spring----简化java开发 1.基于pojo的轻量级和最小侵入性编程 2.通过依赖注入和面向接口实现松耦合 3.基于切面和惯例进行声明式编程 4.通过切面和模板减少样板式代码Spring-----编程思想 1.OOP---Object Oriented Programming(面向对象编程),用程序总结生活中的一切事物 2.BOP---Bean Oriented Programming(面向Bean编程),面向Bean(普通的类)设计程序,解放程序员 3.AOP----Aspect Oriente

MOWRONG的博客 433

Java设计模式深度学习笔记|对标黑马程序员Java设计模式课程

原创整理Java设计模式核心知识点,系统对标黑马程序员热门Java设计模式课程,涵盖23种模式精讲与实战应用,助你夯实架构思维、提升代码质量。

htzss1990的博客 29

视频教程-轻松搞懂设计模式-Java

轻松搞懂设计模式 计算机软件理论硕士毕业,有十几年企业研发经验和教育行业培训...

weixin_33231032的博客 335

java语言类型是什么语言,使用/教程/实例

Java快速入门:Java修饰符类型修饰符是一种添加到定义以更改其含义的关键字。Java语言有各种各样的修饰符,包括以下两种 - Java访问修饰符 - 例如:private,protected,public等。 Java非访问修饰符 - 例如:static,final等。 要使用修饰符,请在类,方法或变量的定义中包含修饰符关键字。 学好java语言到底能做什么呢?学好java语言到底能做什么呢?1.可以自己设计游戏与其玩游戏,不如自己设计游戏;或许你不知道,在以前,我们玩的很多手机游戏都是通过Jav

神经网络爱好者 155

java进阶(一)+学习笔记

摘要:设计模式是软件开发中针对常见问题的标准化解决方案,分为创建型、结构型和行为型三大类。学习设计模式能提升编程思维、代码质量和系统扩展性。UML类图是表达类关系的建模语言,包含继承、实现、依赖、关联等关系类型。设计原则如开闭原则、单一职责原则等指导模式应用。实际开发中应避免过度设计,理解模式思想比记忆结构更重要,灵活组合模式解决复杂问题。设计模式是提升代码质量的重要工具,但需合理运用才能发挥最大价值。

weixin_41330897的博客 753

66个Java核心代码示例从小白到AI全栈架构师的实战指南

本文系统整理了66个Java开发必备的核心代码示例,涵盖基础语法、面向对象、集合框架、多线程、IO/NIO、网络编程等关键领域,并深入探讨如何将这些Java技能应用于AI全栈开发。通过实际代码演示和架构设计思路,帮助开发者构建完整的知识体系,实现从Java初学者到AI全栈架构师的技术跃迁。

专注于全栈开发领域 935

java设计模式

1 工厂模式1.1 普通工厂//先定义接口 interface GcInt{ void Send(); } public class Gc1 implements GcInt{ @Override public void Send() { Log.e("1","1");//标明log1 } } class Gc2 implements GcInt{ ...

慕流蓝 433

Augmentor架构深度解析:从工厂模式到策略模式的设计实现原理

Augmentor是一个专为机器学习设计的Python图像增强库,采用独特的架构设计实现了高效、可扩展的图像数据增强功能。该库通过工厂模式和策略模式的巧妙结合,构建了一个既灵活又高效的图像处理系统,为深度学习项目提供了强大的数据增强支持。 ## 设计理念:可插拔操作与流水线调度 Augmentor的核心设计理念围绕两个关键原则展开:可插拔的操作单元和智能的流水线调度机制。不同于传统的图像处理库

gitblog_00739的博客 706
上一篇: 5、(创建型设计模式)Java 工厂方法模式深度学习指南
下一篇: 17、(行为型设计模式)Java 状态模式深度学习指南
龙茶清欢
博客等级 码龄7年 3720粉丝 375原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙茶清欢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值