自学内容网 自学内容网

java设计模式-命令模式

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

步骤一:定义命令接口

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

// Command.java
public interface Command {
    void execute();
}

步骤二:创建具体命令类

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

// 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);
        // 实际应用中可以在这里编写保存文件的具体逻辑
    }
}

步骤三:创建调用者类

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

// ButtonInvoker.java
public class ButtonInvoker {
    private Command command;

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

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

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

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

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


原文地址:https://blog.csdn.net/wsrzsfgst/article/details/140591996

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!