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

DL-5 深度学习框架的对比 在深度学习领域的五大巨头里,它们都各自力挺一种深度学习框架:像谷歌有自家的TensorFlow、Facebook有Torch、百度有Paddle Paddle、微软有CNTK、而亚马逊的AWS则有MXNet,现在还有支持HADOOP的NL4J深度学习框架。 表1.1 是五大主流深度学习框架概要对比表。每种框架都有其优缺点,选择的时候更加需要根据自身业务的实际需求。例如需要用到对时间序列分析的,那么就会使用循环神经网络RNN,而Caffe、MXNet就是对图像卷积处理非常友善而缺乏循环神经网络,Googl 阅读详情

以下是为你精心撰写的 《Java 命令模式深度学习指南》,专为 Java 后端开发者打造,内容涵盖:定义、作用、与策略模式的深度对比、真实业务场景、实现方式(命令+调用者+接收者)、Spring Task / 消息队列 对应、撤销/重做/日志/异步支持、避坑指南、最佳实践、面试高频题,所有示例均含中文注释,可直接用于项目重构、操作回滚、任务队列、审计日志、微服务异步处理等核心场景。


📘 Java 命令模式深度学习指南

—— 从“直接调用”到“操作封装与异步执行”的架构跃迁

作者:Java 后端架构实战导师
适用对象:Java 后端开发者(Spring Boot / 微服务 / 异步系统 / 消息队列 / 审计系统)
目标:彻底掌握“将请求封装为对象,实现操作的参数化、排队、记录、撤销、重做”的核心模式,告别“硬编码执行”和“无回滚能力”
核心原则:“我不是执行你,我是把你的指令打包,随时可发、可存、可撤。”


✅ 一、什么是命令模式?

📌 定义:

命令模式(Command Pattern) 是一种行为型设计模式,它将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。

🔍 核心思想:

  • 命令(Command):封装一个操作及其参数,是一个对象
  • 调用者(Invoker):触发命令执行,但不知道具体操作内容
  • 接收者(Receiver):真正执行操作的“干活的人”
  • 客户端:创建命令对象,绑定接收者,交给调用者
  • 核心价值:解耦请求的发出者与执行者

💡 一句话记忆:
“我不是让你去关灯,我把‘关灯’这个动作写成一张指令卡,你拿去执行就行。”

🆚 命令模式 vs 直接调用

方式直接调用命令模式
请求形式方法调用 service.deleteUser(id)对象 new DeleteUserCommand(id)
可存储❌ 无法保存✅ 可序列化、存数据库、发 MQ
可排队❌ 同步阻塞✅ 放入队列,异步消费
可撤销❌ 无法回滚✅ 实现 undo() 方法
可重做❌ 无✅ 实现 redo() 方法
可记录日志❌ 需手动记录✅ 自动记录命令对象
可批量执行❌ 逐个调用✅ 批量执行命令列表
典型场景简单 CRUD操作回滚、任务队列、审计系统

✅ 经典比喻:
你点外卖:

  • 直接调用:你打电话给餐厅:“给我送一份宫保鸡丁!” → 无法追踪、无法撤销
  • 命令模式:你写一张“订单卡”:{"action":"order","dish":"宫保鸡丁","time":"18:00"} → 餐厅收到后执行,你可随时取消、查询、重做

✅ 二、命令模式有什么作用?(Why Use Command Pattern?)

作用说明
✅ 解耦请求发送者与接收者调用者不知道谁执行,接收者不知道谁调用
✅ 支持操作撤销与重做实现 undo() 和 redo(),用于编辑器、订单系统
✅ 支持操作排队与异步执行命令可放入队列,由消费者异步处理(如 MQ)
✅ 支持操作日志记录所有命令可持久化,用于审计、追踪、回溯
✅ 支持批量执行与事务可组合多个命令为宏命令(Macro Command)
✅ 支持定时执行命令可设置执行时间,用于定时任务
✅ 支持参数化请求不同命令携带不同参数,统一接口调用
✅ 支撑事件驱动架构是事件溯源(Event Sourcing)和 CQRS 的基础

💡 经典名言:
“Encapsulate a request as an object, thereby letting you parameterize clients with different requests, queue or log requests, and support undoable operations.”
——《Design Patterns: Elements of Reusable Object-Oriented Software》


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

场景说明是否推荐使用命令模式
✅ 订单操作回滚用户取消订单 → 回滚库存、退款、取消物流✅ 强烈推荐
✅ 用户操作审计记录“谁在什么时候做了什么操作”✅ 强烈推荐
✅ 任务队列系统异步发送邮件、短信、通知、数据同步✅ 强烈推荐
✅ 微服务异步通信通过 Kafka/RabbitMQ 传递“命令”实现服务解耦✅ 强烈推荐
✅ 编辑器撤销/重做Word、IDE、在线文档的 Ctrl+Z / Ctrl+Y✅ 推荐
✅ 批处理任务导入 10 万条数据,每条作为一条命令✅ 推荐
✅ 定时任务调度“明天 8 点发送提醒” → 封装为命令,定时触发✅ 推荐
✅ 权限变更日志修改用户角色 → 记录“原角色→新角色”命令✅ 推荐
✅ 支付流水记录每笔支付、退款、转账都是一条命令✅ 推荐
❌ 简单 CRUD如 userService.updateUser()❌ 直接调用即可
❌ 同步业务调用如“扣库存必须同步完成”❌ 用事务,非命令
❌ 单一操作只有一个动作,无需回滚❌ 不需要命令模式

✅ 判断标准:
“我需要记录、排队、异步、撤销、重做、审计某个操作?”
→ 是 → 用命令模式!


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

我们从基础结构到Spring Task + Kafka 实战,逐步深入。


🔹 1. 基础结构:命令 + 调用者 + 接收者(经典实现)

/**
 * 【1】接收者:真正执行操作的对象
 */
class OrderService {
    public void createOrder(String orderId) {
        System.out.println("🛒 创建订单:" + orderId);
    }

    public void cancelOrder(String orderId) {
        System.out.println("❌ 取消订单:" + orderId);
    }

    public void refund(String orderId, double amount) {
        System.out.println("💰 退款订单:" + orderId + ",金额:" + amount);
    }

    public void updateInventory(String productId, int quantity) {
        System.out.println("📦 更新库存:商品ID=" + productId + ",数量=" + quantity);
    }
}

/**
 * 【2】命令接口:定义执行和撤销方法
 */
interface Command {
    void execute();   // 执行命令
    void undo();      // 撤销命令(可选)
}

/**
 * 【3】具体命令1:创建订单命令
 */
class CreateOrderCommand implements Command {
    private final OrderService orderService;
    private final String orderId;

    public CreateOrderCommand(OrderService orderService, String orderId) {
        this.orderService = orderService;
        this.orderId = orderId;
    }

    @Override
    public void execute() {
        orderService.createOrder(orderId);
    }

    // 可选:撤销(一般不建议撤销创建,但保留结构)
    @Override
    public void undo() {
        System.out.println("⚠️ 撤销创建订单:" + orderId + "(通常不建议)");
    }
}

/**
 * 【4】具体命令2:取消订单命令
 */
class CancelOrderCommand implements Command {
    private final OrderService orderService;
    private final String orderId;

    public CancelOrderCommand(OrderService orderService, String orderId) {
        this.orderService = orderService;
        this.orderId = orderId;
    }

    @Override
    public void execute() {
        orderService.cancelOrder(orderId);
    }

    @Override
    public void undo() {
        System.out.println("🔄 撤销取消订单:" + orderId + ",恢复订单");
        // 恢复逻辑:重新调用 createOrder
        orderService.createOrder(orderId);
    }
}

/**
 * 【5】具体命令3:退款命令
 */
class RefundCommand implements Command {
    private final OrderService orderService;
    private final String orderId;
    private final double amount;

    public RefundCommand(OrderService orderService, String orderId, double amount) {
        this.orderService = orderService;
        this.orderId = orderId;
        this.amount = amount;
    }

    @Override
    public void execute() {
        orderService.refund(orderId, amount);
    }

    @Override
    public void undo() {
        System.out.println("🔄 撤销退款:" + orderId + ",恢复金额:" + amount);
        // 恢复逻辑:模拟重新扣款(实际需调用支付系统)
    }
}

/**
 * 【6】调用者:触发命令,不关心具体操作
 */
class CommandInvoker {
    private final List<Command> commandHistory = new ArrayList<>(); // 命令历史(用于撤销/重做)

    public void executeCommand(Command command) {
        System.out.println("➡️ 执行命令:" + command.getClass().getSimpleName());
        command.execute();
        commandHistory.add(command); // 记录命令,用于撤销
    }

    public void undoLastCommand() {
        if (!commandHistory.isEmpty()) {
            Command lastCommand = commandHistory.remove(commandHistory.size() - 1);
            System.out.println("↩️ 撤销命令:" + lastCommand.getClass().getSimpleName());
            lastCommand.undo();
        } else {
            System.out.println("⛔ 无命令可撤销");
        }
    }

    public void showHistory() {
        System.out.println("📋 命令历史:" + commandHistory.size() + " 条");
    }
}

/**
 * 【7】客户端:组装命令,交给调用者
 */
public class CommandDemo {
    public static void main(String[] args) {
        OrderService orderService = new OrderService();
        CommandInvoker invoker = new CommandInvoker();

        // ✅ 创建命令对象
        Command createCmd = new CreateOrderCommand(orderService, "ORD20240501");
        Command cancelCmd = new CancelOrderCommand(orderService, "ORD20240501");
        Command refundCmd = new RefundCommand(orderService, "ORD20240501", 199.9);

        // ✅ 由调用者执行命令
        invoker.executeCommand(createCmd); // 创建订单
        invoker.executeCommand(cancelCmd); // 取消订单
        invoker.executeCommand(refundCmd); // 退款

        invoker.showHistory(); // 查看历史

        // ✅ 撤销上一个操作(撤销退款)
        invoker.undoLastCommand(); // 撤销退款
        invoker.undoLastCommand(); // 撤销取消订单
        invoker.undoLastCommand(); // 撤销创建订单(不建议)
    }
}
✅ 输出结果:
➡️ 执行命令:CreateOrderCommand
🛒 创建订单:ORD20240501
➡️ 执行命令:CancelOrderCommand
❌ 取消订单:ORD20240501
➡️ 执行命令:RefundCommand
💰 退款订单:ORD20240501,金额:199.9
📋 命令历史:3 条
↩️ 撤销命令:RefundCommand
🔄 撤销退款:ORD20240501,恢复金额:199.9
↩️ 撤销命令:CancelOrderCommand
🔄 撤销取消订单:ORD20240501,恢复订单
↩️ 撤销命令:CreateOrderCommand
⚠️ 撤销创建订单:ORD20240501(通常不建议)
✅ 优点:
  • 结构清晰:命令、调用者、接收者职责分离
  • 支持撤销/重做:通过 undo() 实现
  • 可记录历史:命令对象可持久化
  • 可扩展:新增命令只需新增类
⚠️ 缺点:
  • 命令类过多(每个操作一个类)
  • undo() 实现复杂(需保存状态)

🔹 2. 命令模式 + Spring Task(定时/异步任务)

将命令封装为 @Component,用 @Async 异步执行。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;

/**
 * 【1】命令接口(抽象)
 */
interface OrderCommand {
    void execute();
}

/**
 * 【2】接收者:订单服务
 */
@Service
class OrderService {
    public void createOrder(String orderId) {
        System.out.println("🛒 创建订单:" + orderId);
    }

    public void sendEmail(String orderId) {
        System.out.println("📧 发送邮件:订单 " + orderId + " 创建成功");
    }

    public void updateInventory(String productId, int quantity) {
        System.out.println("📦 更新库存:商品ID=" + productId + ",数量=" + quantity);
    }
}

/**
 * 【3】具体命令1:创建订单并发送邮件(异步)
 */
@Component
public class CreateOrderAndSendEmailCommand implements OrderCommand {

    @Autowired
    private OrderService orderService;

    private final String orderId;
    private final String productId;

    public CreateOrderAndSendEmailCommand(String orderId, String productId) {
        this.orderId = orderId;
        this.productId = productId;
    }

    @Async // ✅ 异步执行
    @Override
    public void execute() {
        System.out.println("⏳ 异步执行命令:CreateOrderAndSendEmailCommand");
        orderService.createOrder(orderId);
        orderService.updateInventory(productId, 1);
        orderService.sendEmail(orderId);
        System.out.println("✅ 异步命令执行完成");
    }
}

/**
 * 【4】调用者:控制器
 */
@RestController
@RequestMapping("/api/order")
public class OrderController {

    @Autowired
    private CreateOrderAndSendEmailCommand createOrderCommand;

    @PostMapping("/create")
    public String createOrder(@RequestParam String orderId, @RequestParam String productId) {
        // ✅ 创建命令对象,交给 Spring 异步执行
        createOrderCommand.setOrderId(orderId);
        createOrderCommand.setProductId(productId);
        createOrderCommand.execute(); // 不阻塞,立即返回

        return "订单创建请求已接收,正在异步处理...";
    }
}
✅ 启动类启用异步:
@SpringBootApplication
@EnableAsync // ✅ 启用异步支持
public class CommandAsyncDemo {
    public static void main(String[] args) {
        SpringApplication.run(CommandAsyncDemo.class, args);
    }
}
✅ 优势:
  • 非阻塞:HTTP 请求立即返回,提升用户体验
  • 自动重试:结合 @Retryable 可实现失败重试
  • 日志追踪:可记录命令 ID、执行时间、状态

🔹 3. 命令模式 + Kafka(微服务异步解耦)

在微服务架构中,命令就是消息,通过 Kafka 传递。

/**
 * 【1】命令对象(可序列化)
 */
public record OrderCommand(
        String commandType,   // 如 "CREATE_ORDER", "CANCEL_ORDER"
        String orderId,
        String userId,
        String productId,
        Double amount,
        Long timestamp
) implements Serializable {}

/**
 * 【2】命令生产者(发布者)
 */
@Component
public class OrderCommandPublisher {

    @Autowired
    private KafkaTemplate<String, OrderCommand> kafkaTemplate;

    public void publishCreateOrderCommand(String orderId, String userId, String productId, Double amount) {
        OrderCommand command = new OrderCommand(
                "CREATE_ORDER",
                orderId,
                userId,
                productId,
                amount,
                System.currentTimeMillis()
        );

        kafkaTemplate.send("order-commands", orderId, command);
        System.out.println("📨 发布命令:创建订单 " + orderId);
    }
}

/**
 * 【3】命令消费者(接收者)
 */
@Component
@KafkaListener(topics = "order-commands", groupId = "order-group")
public class OrderCommandConsumer {

    @Autowired
    private OrderService orderService;

    @Autowired
    private AuditLogService auditLogService;

    @KafkaListener(topics = "order-commands", groupId = "order-group")
    public void consume(OrderCommand command) {
        System.out.println("📥 接收命令:" + command);

        switch (command.commandType()) {
            case "CREATE_ORDER":
                orderService.createOrder(command.orderId());
                orderService.updateInventory(command.productId(), 1);
                orderService.sendEmail(command.orderId());
                auditLogService.log("用户 " + command.userId() + " 创建订单 " + command.orderId());
                break;
            case "CANCEL_ORDER":
                orderService.cancelOrder(command.orderId());
                orderService.refund(command.orderId(), command.amount());
                auditLogService.log("用户 " + command.userId() + " 取消订单 " + command.orderId());
                break;
            default:
                System.err.println("未知命令类型:" + command.commandType());
        }
    }
}
✅ application.yml 配置:
spring:
  kafka:
    bootstrap-servers: localhost:9092
    producer:
      key-serializer: org.apache.kafka.common.serialization.StringSerializer
      value-serializer: org.springframework.kafka.support.serializer.JsonSerializer
    consumer:
      key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      value-deserializer: org.springframework.kafka.support.serializer.JsonDeserializer
      properties:
        spring.json.trusted.packages: "*"
✅ 优势:
  • 完全解耦:订单服务不直接调用库存、邮件服务
  • 高可用:Kafka 持久化,消息不丢失
  • 可扩展:多个消费者可监听同一命令
  • 审计溯源:所有命令被记录,可回溯
  • 企业级标准:美团、淘宝、京东都在用

✅ 这是命令模式的终极形态:命令 = 消息 = 事件


🔹 4. 命令模式 + 宏命令(批量执行)

一个命令可以包含多个子命令,实现“批量操作”。

/**
 * 【1】宏命令:组合多个命令
 */
class MacroCommand implements Command {
    private final List<Command> commands = new ArrayList<>();

    public void add(Command command) {
        commands.add(command);
    }

    @Override
    public void execute() {
        System.out.println("🔁 开始执行宏命令(批量操作)");
        for (Command cmd : commands) {
            cmd.execute();
        }
        System.out.println("✅ 宏命令执行完成");
    }

    @Override
    public void undo() {
        System.out.println("↩️ 开始撤销宏命令(反向执行)");
        // 逆序撤销
        for (int i = commands.size() - 1; i >= 0; i--) {
            commands.get(i).undo();
        }
        System.out.println("✅ 宏命令撤销完成");
    }
}

/**
 * 【2】客户端使用宏命令
 */
public class MacroCommandDemo {
    public static void main(String[] args) {
        OrderService orderService = new OrderService();

        // 创建多个命令
        Command create = new CreateOrderCommand(orderService, "ORD001");
        Command updateInventory = new UpdateInventoryCommand(orderService, "P001", 1);
        Command sendEmail = new SendEmailCommand(orderService, "ORD001");

        // 组合成宏命令
        MacroCommand macro = new MacroCommand();
        macro.add(create);
        macro.add(updateInventory);
        macro.add(sendEmail);

        // 执行宏命令(一次执行三个操作)
        macro.execute();

        // 撤销宏命令(一次撤销三个操作)
        macro.undo();
    }
}
✅ 适用场景:
  • 批量导入 1000 条数据 → 1000 个命令 + 1 个宏命令
  • 一键发布文章 → 创建文章 + 更新标签 + 发送通知 + 记录日志

✅ 五、命令模式 vs 策略模式 对比

维度命令模式策略模式
目的封装操作(执行、撤销、记录)封装算法(选择不同实现)
核心操作是“动作”算法是“计算”
是否可撤销✅ 支持 undo()❌ 一般不支持
是否可排队✅ 可放入队列❌ 一般不排队
是否可持久化✅ 命令对象可序列化❌ 策略对象通常不持久
典型场景撤销、日志、任务队列支付方式、排序算法、折扣策略
类比“关灯”这个动作“用哪种灯泡”这个选择

✅ 一句话区分:

  • 命令:“我要执行一个动作”(如:删除用户)
  • 策略:“我用哪种方式计算”(如:会员折扣 9 折)

✅ 六、命令模式的避坑指南(Java 后端高频踩坑)

问题原因解决方案
❌ 命令类过多导致项目臃肿每个操作都写一个类✅ 用枚举 + switch 统一处理,或用 Spring 的 @Component 自动注册
❌ undo() 实现复杂需保存操作前状态✅ 用“快照”模式(Snapshot)保存状态,或用“补偿事务”
❌ 忘记序列化命令对象无法存数据库、发 MQ✅ 实现 Serializable,或用 JSON 序列化(如 Jackson)
❌ 命令无唯一 ID无法追踪、重试、去重✅ 每个命令生成 UUID 作为唯一标识
❌ 命令执行失败无重试消息丢失✅ 结合 Kafka 的重试机制、死信队列
❌ 命令被重复执行网络重试导致重复消费✅ 用幂等性设计(如 orderId 唯一)
❌ 混淆命令与事件命令是“我要做”,事件是“我做了”✅ 命令:CreateOrderCommand;事件:OrderCreatedEvent

✅ 幂等性设计建议:

public class CreateOrderCommand implements Command {
    private final String orderId; // ✅ 唯一标识
    private final String userId;

    @Override
    public void execute() {
        if (orderService.isOrderExists(orderId)) {
            System.out.println("✅ 命令已执行,幂等处理,跳过");
            return;
        }
        orderService.createOrder(orderId);
    }
}

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

阶段建议
📚 第一周将你项目中的“发送短信”逻辑,重构为 SendSmsCommand,用 @Async 异步执行
📚 第二周用命令模式实现“订单取消”功能,并支持 undo() 恢复订单
📚 第三周用 Kafka 发送“订单创建”命令,由另一个服务消费并更新库存
📚 第四周阅读 Spring Kafka 源码:KafkaTemplate 如何封装命令?
📚 面试准备准备回答:

“你项目中哪里用了命令模式?”
“命令模式和策略模式区别?”
“如何实现命令的撤销和重做?”
“Kafka 消息是命令模式吗?” |


✅ 八、命令模式面试高频题(附答案)

Q1:命令模式解决了什么问题?

A:将请求封装为对象,支持操作的参数化、排队、记录、撤销、重做,实现请求发送者与接收者解耦。

Q2:命令模式和策略模式的区别?

A:

  • 命令模式:封装一个操作动作(如:删除用户)
  • 策略模式:封装一个算法选择(如:用哪种折扣算法)
    → 一个是“做什么”,一个是“怎么做”

Q3:如何实现命令的撤销功能?

A:在命令类中实现 undo() 方法,该方法需反向执行原操作,或恢复操作前状态。建议使用“快照”或“补偿事务”。

Q4:Kafka 消息是命令模式吗?

A:是的!在微服务架构中,通过消息队列传递的“操作指令”就是命令模式的体现,如:CreateOrderCommand、RefundCommand。

Q5:命令模式适合做事务吗?

A:不适合!命令模式用于异步、可撤销、可追溯的场景,强一致性事务应由数据库事务或 Saga 模式管理。


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

graph TD
    A[需要记录、撤销、异步、重试某个操作吗?] --> B{是否需要跨服务?}
    B -->|是| C[用 Kafka/RabbitMQ 发送命令消息]
    B -->|否| D{是否需要撤销/重做?}
    D -->|是| E[用 Command + Undo/Redo + 历史栈]
    D -->|否| F[用 @Async + Spring Task 异步执行]

✅ 最终推荐:

  • 需要撤销/重做/审计 → ✅ 手写 Command + Undo
  • 异步执行、非关键操作 → ✅ @Async + Spring Task
  • 微服务解耦、高可用 → ✅ Kafka + 命令消息
  • 绝对不要:直接调用、无回滚、无日志、无幂等

✅ 十、结语:真正的高手,不执行操作,只发送指令

你不是在学“命令模式”,你是在学“如何让系统具备操作的可追溯性、可恢复性和可扩展性”。

✅ 当你看到用户点击“取消订单”,系统自动回滚库存、退款、发送通知,而你只写了一个 CancelOrderCommand 类时,你已经掌握了优雅架构的精髓。
✅ 当你用 Kafka 传递“支付成功”命令,让 5 个微服务各自消费,互不影响时,你已经是分布式架构师了。

不要为了“用模式”而用模式,
要为了“系统可审计、可恢复、可扩展”而选择它。


Java小样本图像分类实战:基于DL4J的迁移学习落地指南 小样本图像分类是指在每类仅数十至数百张标注图像条件下实现高精度视觉识别的技术路径,其核心依赖迁移学习原理——复用大规模数据集(如ImageNet)预训练的通用特征表示,通过微调适配下游任务。该技术显著降低对标注成本与算力的依赖,具备强工程落地价值,广泛应用于工业质检、医疗影像初筛、边缘智能终端等资源受限场景。在Java技术栈中,DL4J成为支撑此类任务的关键框架,它原生兼容JVM环境、支持GPU加速与模型序列化,可无缝嵌入Spring Boot、OPC UA等企业级系统。本文聚焦Java生态下小样本图像分类 阅读详情

相关推荐

Java金融反欺诈实战:从DL4J深度学习到Flink实时监控的全栈解决方案

毫秒级响应:Flink流处理架构支持每秒百万级交易处理99.3%准确率:DL4J深度学习模型+XGBoost的混合架构动态更新:Redis模型缓存与热更新机制全链路监控:从数据采集到告警的端到端追踪联邦学习:实现跨机构数据隐私保护下的模型训练图神经网络:分析用户关系网络中的异常模式量子计算优化:利用量子退火算法加速特征选择。

墨夶的博客 1586

【设计模式】深度解析(Java实战)

设计模式是软件工程中解决特定问题的可复用方案,分为创建型、结构型和行为型三大类。创建型模式(如单例、工厂方法)封装对象创建过程;结构型模式(如代理、适配器)优化类与对象的组合;行为型模式(如观察者、策略)规范对象交互。六大核心原则(开闭、单一职责等)指导设计模式应用。单例模式确保全局唯一实例,工厂方法模式将对象创建延迟到子类。这些模式提升代码复用性、可维护性和扩展性,是资深开发者经验的提炼。

独立思考,明辨是非 1218

Java语音处理实战:从音频采集到深度学习的全链路解析

带你揭开Java语音处理的"黑科技":从javax.sound.sampled到TarsosDSP,从CMU Sphinx到DL4J,我们将用代码和数据证明——如何让Java在语音世界中"声"临其境!

墨夶的博客 710

在Java中实现深度学习:从模型设计到性能优化

使用DeepLearning4J等工具,可以高效地构建和训练深度学习模型,并通过优化策略提高模型的性能。通过不断的实验和调整,我们可以设计出高效的深度学习系统,以满足各种实际应用的需求。本文将介绍如何在Java中实现深度学习,从模型设计到性能优化,涵盖使用流行的深度学习库、模型训练与评估以及性能调优等方面。模型压缩技术(如剪枝和量化)可以减少模型的计算和存储需求,从而加速模型推理过程。可视化工具(如TensorBoard或DL4J的训练监控工具)可以帮助监控模型训练过程中的损失和准确率,便于调试和优化。

微赚淘客系统开发者博客 1665

Abaqus SIGTERM/SIGINT中断问题深度解析与实战解决方案

本文深度解析Abaqus仿真计算中因SIGTERM或SIGINT信号导致作业意外终止的常见问题。核心原因常为许可证管理器因网络通信延迟误判进程空闲而强制断开,或系统资源监控工具的误杀。文章提供了从命令行参数调优(如使用int、ask_delete=OFF)、计算环境隔离到编写自动化容错脚本的完整实战解决方案,帮助用户彻底规避此类中断,确保长时间仿真任务的稳定运行。

weixin_29279101的博客 409

python123题目——摩尔斯电码转换

类型:列表元组。

m0_62488776的博客 4414

深度学习设计模式之单例模式

一个类只能有一个实例,提供该实例的全局访问点;

G_whang的博客 920

GIS小白也能看懂的实战:5步教你将ArcGIS里的等高线和水系完美导入CAD做规划图

本文详细介绍了如何将ArcGIS中的等高线和水系数据高效导入CAD,制作专业规划底图的5个关键步骤。从数据准备、ArcGIS处理到CAD优化,涵盖坐标系设置、数据裁剪、格式转换等实用技巧,特别适合设计规划领域的新手快速掌握GIS与CAD协同工作流程。

weixin_27966471的博客 425

深度学习设计模式(二):基本的设计模式(例子+业务场景+八股)。

加油

左灯右行的爱情 353

Unity VR 零基础开发之 Pico4 MR

2、弹出弹窗后,点击Android选项,然后再点击Switch Platform按钮切换成安卓平台。3、切换完成后Android选项后面会显示unity图标。

十画的博客 5089

利用setEcoMode优化innovus中的ecoAddRepeater批量操作效率

本文详细介绍了在Cadence Innovus工具中,如何利用setEcoMode命令的batchMode参数,显著提升ecoAddRepeater命令在批量插入buffer或inverter时的操作效率。通过合并重复的初始化和数据库更新开销,该模式可将大规模时序修复操作的执行速度提升数倍,并提供了完整的脚本示例与最佳实践,帮助后端设计工程师优化ECO流程。

mango的博客 511

java设计模式深度理解分析

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

qq_43917601的博客 1275

TC397 EB MCAL开发从0开始系列 之 [13.1] Dma配置实战 -实现M2M数据传输(读存储写存储)

TC3XX TC397 MCAL DMA 从0搭建测试用例-实现M2M 存储到存储数据传输

yy九歌的博客 1912

将【深度学习】和【Spring Boot】集成:使用 DL4J 的综合指南

示例:使用 Spring Boot、Java 和 DL4J 的贷款审批推荐系统一、场景设想您想要在“贷款审批”应用程序中构建一个微服务,根据历史数据建议是否批准或拒绝贷款申请。该建议基于使用 DL4J 训练的机器学习模型。

在技术的广袤天地里,本博客如精准罗盘。剖析前沿科技,深掘代码奥秘,以精炼笔触,带您穿越复杂技术迷宫,速达知识彼岸。 3280

基于Django+Vue3的智能目标检测系统设计与实现,Vue3前台系统+Django后台管理系统开发,Web前后端分离,YOLOv8 Web目标检测,实现图片、视频和摄像头检测等功能,全网独发

目标检测是计算机视觉中的重要任务,广泛应用于安防监控、自动驾驶、智能家居等领域。YOLO系列模型由于其高效的检测速度和较高的准确率,成为目标检测任务的首选算法之一。本项目结合 YOLOv8 与 Django + Vue3,构建一个Vue3前台系统+Django后台管理系统开发,便于用户进行目标检测的操作和展示,实现对图片、视频实时目标检测,不仅可以用于大论文的工作量展示,还可以作为毕业设计。支持更换自己模型、图片检测、实时视频检测、置信度调节和IoU参数调节。同时支持目标检测、实例分割、关键点检测等任务

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 5431

手把手教你学基于 Linux 的 NPU 固件开发-第 10 讲:可靠性设计(RAS)——让系统坚如磐石错误检测、纠正与上报机制(ECC、Parity)

组件推荐保护机制备注HBM/DDRScrubbing必须开启,定期巡检片上 SRAMECC(权重/激活值),Parity(指令)权衡面积与可靠性计算单元ABFT或DMR(关键路径)防止计算逻辑错误片上网络CRC重传保证数据传输完整性系统软件AER 上报CE 监控自动恢复闭环管理,杜绝 SDC运维策略预测性维护Checkpoint变被动为主动核心心法(信任硬件,但必须验证。在纳米尺度下,错误是必然发生的物理现象。

MHD0815的博客 90

DL4J---导入Keras模型进行使用

使用Java深度学习框架DL4J导入Keras模型 应工作需要,需要使用Java来调用Keras构建的深度学习模型 注: DL4J框架对 Keras 后端TensorFlow版本具有要求: TensorFlow版本2.0以下作后端所支持的 Keras 构建的h5模型可成功导入,预测 TensorFlow版本2.0作后端所支持的 Keras 构建的h5模型无法成功导入,预测 血泪史 由于笔者使用的是...

qq_41982466的博客 1084

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Java 深度学习项目(一)

数据的持续增长以及对基于这些数据做出越来越复杂决策的需求,正在带来巨大的障碍,阻碍组织通过传统的分析方法及时获取见解。为了寻找有意义的价值和见解,深度学习得以发展,深度学习是基于学习多个抽象层次的机器学习算法分支。神经网络作为深度学习的核心,被广泛应用于预测分析、计算机视觉、自然语言处理、时间序列预测以及执行大量其他复杂任务。至今,大多数深度学习书籍都是以 Python 编写的。然而,本书是为开发者、数据科学家、机器学习从业者和深度学习爱好者设计的,旨在帮助他们利用 Deeplearning4j(一个基于

龙哥盟 2197

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Java 深度学习秘籍(三)

原文:annas-archive.org/md5/f5d28e569048a2e5329b5ab42aa19b12。

龙哥盟 1599

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

DL4J实战之四:经典卷积实例(GPU版本)

用GPU加速训练过程

程序员欣宸的博客 1259

java整合DL645-2007与Dl645-1997

DL645-2007的地址域发送命令是AAAAAAAAAAAA,DL645-1997的地址域发送命令是999999999999。1:DL645计算校验和的方法(byte数组)1:DL645计算校验和的方法(字符串)2-1:DL645读取数据代码工具类。2:DL645读取数据代码。2-2:pom.xml依赖。

qq_19891197的博客 856

设计模式总结

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

qq_34665775的博客 114

自己打造一个深度学习框架 for java

自己打造一个深度学习框架 for java 前言 从16年开始利用空余时间研究深度学习的方面,由于工作的原因,最熟悉的编程语言就是java,所以框架的编程语言自然而然就使用了java。自己打造框架的初衷就是为了更加深入了解各个算法、模型、实现的原理和思路。 框架介绍 Omega-AI:基于java打造的深度学习框架,帮助你快速搭建神经网络,实现训练或测试模型,支持多线程运算,框架目前支持BP神经网络和卷积神经网络的构建。 源码地址: https://gitee.com/iangellove/omega-ai

2158

Java 深度学习项目(二)

本章中,我们已经看到如何使用 DL4J 框架上的 CNNs 开发一个实际应用。我们已经了解了如何通过九个 CNN 和一系列复杂的特征工程与图像处理操作来解决多标签分类问题。尽管我们未能实现更高的准确性,但我们鼓励读者在代码中调整超参数,并尝试在相同的数据集上使用相同的方法。此外,推荐使用所有图像训练 CNN,以便网络可以获得足够的数据来学习 Yelp 图像中的特征。还有一个建议是改进特征提取过程,以便 CNN 能够获得更多的高质量特征。

龙哥盟 1624

Android插件化学习之路(七)之DL插件开发该注意的坑

随着前面几篇博客的学习,相信大家对插件化已经有了比较清楚的认识,然而如何将插件化应用到项目中?网上已经有一些优秀的开源框架,这里要向大家推荐一个开源的动态加载框架DL, 该项目由任玉刚大神发起的,项目地址: https://github.com/singwhatiwanna/dynamic-load-apk,该项目结构图如下: 本篇博客,我主要向大家介绍一下利用DL框架进行开发的具体步骤,

一个码农的博客 5028
上一篇: 15、(行为型设计模式)Java 责任链模式深度学习指南
下一篇: OpenAPI 3.0 注解在 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、付费专栏及课程。

余额充值