为了用户使用方便,某系统提供了一系列功能键,用户可以自定义功能键的功能,例如功能键FunctionButton可以用于退出系统(由SystemExitClass类来实现,方法为exit()),也可以用于显示帮助文档(由DisplayHelpClass类来实现,方法为help())。 现使用命令模式来设计该系统,使得功能键类与功能类之间解耦,可为同一个功能键设置不同的功能。Java版
时间: 2023-12-11 10:04:32 浏览: 69
命令模式是一种行为型设计模式,它通过将请求封装成对象,从而使您可以使用不同的请求、队列或日志来参数化客户端请求。在此场景中,我们可以把每个功能键看作一个请求,具体功能的实现则由对应的功能类来完成。
首先我们需要定义一个命令接口,它包含了执行命令的方法execute():
```java
public interface Command {
void execute();
}
```
接下来,我们可以定义具体的功能类,例如SystemExitClass和DisplayHelpClass:
```java
public class SystemExitClass {
public void exit() {
// 退出系统的具体实现
}
}
public class DisplayHelpClass {
public void help() {
// 显示帮助文档的具体实现
}
}
```
然后我们可以为每个功能类创建一个具体的命令对象:
```java
public class SystemExitCommand implements Command {
private SystemExitClass systemExit;
public SystemExitCommand(SystemExitClass systemExit) {
this.systemExit = systemExit;
}
@Override
public void execute() {
systemExit.exit();
}
}
public class DisplayHelpCommand implements Command {
private DisplayHelpClass displayHelp;
public DisplayHelpCommand(DisplayHelpClass displayHelp) {
this.displayHelp = displayHelp;
}
@Override
public void execute() {
displayHelp.help();
}
}
```
最后,我们可以定义一个功能键类,它包含了一个命令对象,并提供了设置命令对象的方法setCommand()和执行命令的方法onClick():
```java
public class FunctionButton {
private Command command;
public void setCommand(Command command) {
this.command = command;
}
public void onClick() {
command.execute();
}
}
```
这样,我们就可以创建具体的功能键对象,并为其设置不同的命令对象,实现同一个功能键的不同功能:
```java
public class Main {
public static void main(String[] args) {
FunctionButton exitButton = new FunctionButton();
FunctionButton helpButton = new FunctionButton();
SystemExitClass systemExit = new SystemExitClass();
DisplayHelpClass displayHelp = new DisplayHelpClass();
Command exitCommand = new SystemExitCommand(systemExit);
Command helpCommand = new DisplayHelpCommand(displayHelp);
exitButton.setCommand(exitCommand);
helpButton.setCommand(helpCommand);
// 点击退出系统按钮
exitButton.onClick();
// 点击显示帮助文档按钮
helpButton.onClick();
}
}
```
这样,我们就成功地使用命令模式来设计了该系统,实现了功能键类与功能类之间的解耦,使得用户可以自定义功能键的具体功能。