java设计模式-命令模式

命令模式是一种行为设计模式,它允许将请求封装为对象,使得可以用不同的请求对客户进行参数化。在 Java Swing 中,结合命令模式可以很好地处理按钮点击事件。下面是一个简单的示例,演示如何使用命令模式来处理 Java Swing 中的按钮点击事件:

步骤一:定义命令接口

首先,我们定义一个命令接口 Command,它有一个执行方法 execute()

java 复制代码
// Command.java
public interface Command {
    void execute();
}

步骤二:创建具体命令类

然后,我们创建具体的命令类,每个类代表一个具体的操作。

java 复制代码
// OpenFileCommand.java
public class OpenFileCommand implements Command {
    private final String filename;

    public OpenFileCommand(String filename) {
        this.filename = filename;
    }

    @Override
    public void execute() {
        // 执行打开文件的操作
        System.out.println("Opening file: " + filename);
        // 实际应用中可以在这里编写打开文件的具体逻辑
    }
}

// SaveFileCommand.java
public class SaveFileCommand implements Command {
    private final String filename;

    public SaveFileCommand(String filename) {
        this.filename = filename;
    }

    @Override
    public void execute() {
        // 执行保存文件的操作
        System.out.println("Saving file: " + filename);
        // 实际应用中可以在这里编写保存文件的具体逻辑
    }
}

步骤三:创建调用者类

接下来,我们创建一个调用者类,用于触发命令执行。

java 复制代码
// ButtonInvoker.java
public class ButtonInvoker {
    private Command command;

    public void setCommand(Command command) {
        this.command = command;
    }

    public void clickButton() {
        // 模拟按钮点击事件
        command.execute();
    }
}

步骤四:创建 Swing 界面和按钮

现在,我们创建一个简单的 Swing 界面,并添加按钮用于触发命令。

java 复制代码
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class CommandPatternExample extends JFrame {
    private ButtonInvoker invoker = new ButtonInvoker();

    public CommandPatternExample() {
        super("Command Pattern Example");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(300, 200);

        JButton openButton = new JButton("Open File");
        openButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                Command openCommand = new OpenFileCommand("example.txt");
                invoker.setCommand(openCommand);
                invoker.clickButton();
            }
        });

        JButton saveButton = new JButton("Save File");
        saveButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                Command saveCommand = new SaveFileCommand("example.txt");
                invoker.setCommand(saveCommand);
                invoker.clickButton();
            }
        });

        JPanel panel = new JPanel();
        panel.setLayout(new FlowLayout());
        panel.add(openButton);
        panel.add(saveButton);

        getContentPane().add(panel);
        setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new CommandPatternExample();
            }
        });
    }
}

解释说明

  • 命令接口 Command :定义了所有具体命令类都要实现的 execute() 方法。
  • 具体命令类 :如 OpenFileCommandSaveFileCommand,分别实现了打开文件和保存文件的操作。
  • 调用者类 ButtonInvoker :负责调用命令对象的 execute() 方法。
  • Swing 界面 :在 CommandPatternExample 类中创建了一个简单的 Swing 界面,包含两个按钮,分别用于触发打开文件和保存文件的命令。

在实际应用中,你可以根据需要定义更复杂的命令和操作,并结合更多的 Swing 组件和事件来实现更复杂的用户交互和命令处理逻辑。

相关推荐
怀旧诚子44 分钟前
timeshift之Fedora43设置,已在VM虚拟机验证,待真机验证。
java·服务器·数据库
1104.北光c°1 小时前
滑动窗口HotKey探测机制:让你的缓存TTL更智能
java·开发语言·笔记·程序人生·算法·滑动窗口·hotkey
云原生指北4 小时前
GitHub Copilot SDK 入门:五分钟构建你的第一个 AI Agent
java
Leinwin8 小时前
OpenClaw 多 Agent 协作框架的并发限制与企业化规避方案痛点直击
java·运维·数据库
薛定谔的悦8 小时前
MQTT通信协议业务层实现的完整开发流程
java·后端·mqtt·struts
enjoy嚣士9 小时前
springboot之Exel工具类
java·spring boot·后端·easyexcel·excel工具类
罗超驿9 小时前
独立实现双向链表_LinkedList
java·数据结构·链表·linkedlist
盐水冰10 小时前
【烘焙坊项目】后端搭建(12) - 订单状态定时处理,来单提醒和顾客催单
java·后端·学习
凸头10 小时前
CompletableFuture 与 Future 对比与实战示例
java·开发语言
wuqingshun31415910 小时前
线程安全需要保证几个基本特征
java·开发语言·jvm