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 组件和事件来实现更复杂的用户交互和命令处理逻辑。

相关推荐
Daniel 大东5 分钟前
BugJson因为json格式问题OOM怎么办
java·安全
哪 吒4 小时前
最简单的设计模式,抽象工厂模式,是否属于过度设计?
设计模式·抽象工厂模式
Theodore_10224 小时前
4 设计模式原则之接口隔离原则
java·开发语言·设计模式·java-ee·接口隔离原则·javaee
冰帝海岸5 小时前
01-spring security认证笔记
java·笔记·spring
世间万物皆对象6 小时前
Spring Boot核心概念:日志管理
java·spring boot·单元测试
没书读了6 小时前
ssm框架-spring-spring声明式事务
java·数据库·spring
小二·6 小时前
java基础面试题笔记(基础篇)
java·笔记·python
开心工作室_kaic7 小时前
ssm161基于web的资源共享平台的共享与开发+jsp(论文+源码)_kaic
java·开发语言·前端
懒洋洋大魔王7 小时前
RocketMQ的使⽤
java·rocketmq·java-rocketmq
武子康7 小时前
Java-06 深入浅出 MyBatis - 一对一模型 SqlMapConfig 与 Mapper 详细讲解测试
java·开发语言·数据仓库·sql·mybatis·springboot·springcloud