使用命令模式设计一个图形绘制系统,该系统可以绘制矩形、椭圆、三角形等图形,恢复和撤销功能。绘制类图并编程实现。
时间: 2024-05-18 16:14:55 浏览: 60
好的,我会尽力回答你的问题。
首先,我们来看一下使用命令模式设计图形绘制系统的类图:
![command-pattern](https://img-blog.csdnimg.cn/20210405175504373.png)
在这个类图中,我们可以看到:
- Command:抽象命令类,定义了一个抽象的 execute() 方法和一个抽象的 undo() 方法。
- DrawCommand:具体命令类,实现了 Command 接口,用于绘制各种图形。
- Shape:抽象接收者类,定义了一个抽象的 draw() 方法,用于绘制各种图形。
- Rectangle、Ellipse、Triangle:具体接收者类,实现了 Shape 接口,用于绘制矩形、椭圆、三角形等图形。
- Invoker:调用者类,用于调用命令对象的 execute() 方法和 undo() 方法。
- Client:客户端类,负责创建命令对象和调用 Invoker 对象。
接下来,我们来编写代码实现这个类图。
首先,我们来定义抽象命令类 Command:
```java
public interface Command {
void execute();
void undo();
}
```
然后,我们来定义具体命令类 DrawCommand:
```java
public class DrawCommand implements Command {
private Shape shape;
public DrawCommand(Shape shape) {
this.shape = shape;
}
@Override
public void execute() {
shape.draw();
}
@Override
public void undo() {
shape.erase();
}
}
```
接下来,我们来定义抽象接收者类 Shape:
```java
public interface Shape {
void draw();
void erase();
}
```
然后,我们来定义具体接收者类 Rectangle、Ellipse、Triangle:
```java
public class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("绘制矩形");
}
@Override
public void erase() {
System.out.println("擦除矩形");
}
}
public class Ellipse implements Shape {
@Override
public void draw() {
System.out.println("绘制椭圆");
}
@Override
public void erase() {
System.out.println("擦除椭圆");
}
}
public class Triangle implements Shape {
@Override
public void draw() {
System.out.println("绘制三角形");
}
@Override
public void erase() {
System.out.println("擦除三角形");
}
}
```
接下来,我们来定义调用者类 Invoker:
```java
public class Invoker {
private List<Command> commands = new ArrayList<>();
public void addCommand(Command command) {
commands.add(command);
}
public void executeCommands() {
for (Command command : commands) {
command.execute();
}
}
public void undoCommands() {
for (int i = commands.size() - 1; i >= 0; i--) {
commands.get(i).undo();
}
}
}
```
最后,我们来定义客户端类 Client:
```java
public class Client {
public static void main(String[] args) {
// 创建接收者对象
Shape rectangle = new Rectangle();
Shape ellipse = new Ellipse();
Shape triangle = new Triangle();
// 创建命令对象
Command drawRectangleCommand = new DrawCommand(rectangle);
Command drawEllipseCommand = new DrawCommand(ellipse);
Command drawTriangleCommand = new DrawCommand(triangle);
// 创建调用者对象
Invoker invoker = new Invoker();
invoker.addCommand(drawRectangleCommand);
invoker.addCommand(drawEllipseCommand);
invoker.addCommand(drawTriangleCommand);
// 执行命令
invoker.executeCommands();
// 撤销命令
invoker.undoCommands();
}
}
```
以上就是使用命令模式设计图形绘制系统的完整代码。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)