命令模式

This commit is contained in:
2020-07-21 16:08:54 +08:00
parent 824c04bc11
commit 5d38b20045
6 changed files with 127 additions and 0 deletions

View File

@@ -0,0 +1,20 @@
package top.fjy8018.designpattern.pattern.behavior.command;
/**
* 关闭视频命令
*
* @author F嘉阳
* @date 2020/7/21 15:58
*/
public class CloseCourseVideoCommand implements Command {
private final CourseVideo courseVideo;
public CloseCourseVideoCommand(CourseVideo courseVideo) {
this.courseVideo = courseVideo;
}
@Override
public void execute() {
courseVideo.close();
}
}

View File

@@ -0,0 +1,11 @@
package top.fjy8018.designpattern.pattern.behavior.command;
/**
* 命令抽象
*
* @author F嘉阳
* @date 2020/7/21 15:58
*/
public interface Command {
void execute();
}

View File

@@ -0,0 +1,23 @@
package top.fjy8018.designpattern.pattern.behavior.command;
/**
* 操作视频
*
* @author F嘉阳
* @date 2020/7/21 15:58
*/
public class CourseVideo {
private final String name;
public CourseVideo(String name) {
this.name = name;
}
public void open() {
System.out.println(this.name + "课程视频开放");
}
public void close() {
System.out.println(this.name + "课程视频关闭");
}
}

View File

@@ -0,0 +1,20 @@
package top.fjy8018.designpattern.pattern.behavior.command;
/**
* 打开视频命令
*
* @author F嘉阳
* @date 2020/7/21 15:58
*/
public class OpenCourseVideoCommand implements Command {
private final CourseVideo courseVideo;
public OpenCourseVideoCommand(CourseVideo courseVideo) {
this.courseVideo = courseVideo;
}
@Override
public void execute() {
courseVideo.open();
}
}

View File

@@ -0,0 +1,29 @@
package top.fjy8018.designpattern.pattern.behavior.command;
import java.util.ArrayList;
import java.util.List;
/**
* 命令执行人
*
* @author F嘉阳
* @date 2020/7/21 15:58
*/
public class Staff {
/**
* 保证执行顺序
*/
private final List<Command> commandList = new ArrayList<Command>();
public void addCommand(Command command) {
commandList.add(command);
}
public void executeCommands() {
for (Command command : commandList) {
command.execute();
}
commandList.clear();
}
}

View File

@@ -0,0 +1,24 @@
package top.fjy8018.designpattern.pattern.behavior.command;
import org.junit.jupiter.api.Test;
/**
* @author F嘉阳
* @date 2020/7/20 16:02
*/
class CommandTest {
@Test
void doTest() {
CourseVideo courseVideo = new CourseVideo("Java设计模式精讲");
OpenCourseVideoCommand openCourseVideoCommand = new OpenCourseVideoCommand(courseVideo);
CloseCourseVideoCommand closeCourseVideoCommand = new CloseCourseVideoCommand(courseVideo);
Staff staff = new Staff();
staff.addCommand(openCourseVideoCommand);
staff.addCommand(closeCourseVideoCommand);
staff.executeCommands();
}
}