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

相关推荐
丶白泽16 分钟前
重修设计模式-设计原则
设计模式·接口隔离原则·依赖倒置原则·开闭原则
【D'accumulation】19 分钟前
典型的MVC设计模式:使用JSP和JavaBean相结合的方式来动态生成网页内容典型的MVC设计模式
java·设计模式·mvc
试行34 分钟前
Android实现自定义下拉列表绑定数据
android·java
茜茜西西CeCe40 分钟前
移动技术开发:简单计算器界面
java·gitee·安卓·android-studio·移动技术开发·原生安卓开发
救救孩子把1 小时前
Java基础之IO流
java·开发语言
小菜yh1 小时前
关于Redis
java·数据库·spring boot·redis·spring·缓存
宇卿.1 小时前
Java键盘输入语句
java·开发语言
浅念同学1 小时前
算法.图论-并查集上
java·算法·图论
立志成为coding大牛的菜鸟.1 小时前
力扣1143-最长公共子序列(Java详细题解)
java·算法·leetcode
鱼跃鹰飞1 小时前
Leetcode面试经典150题-130.被围绕的区域
java·算法·leetcode·面试·职场和发展·深度优先