From 5d38b200456112281620de246e9ce7f07e3d0405 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=E5=98=89=E9=98=B3?= Date: Tue, 21 Jul 2020 16:08:54 +0800 Subject: [PATCH] =?UTF-8?q?=E5=91=BD=E4=BB=A4=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../command/CloseCourseVideoCommand.java | 20 +++++++++++++ .../pattern/behavior/command/Command.java | 11 +++++++ .../pattern/behavior/command/CourseVideo.java | 23 +++++++++++++++ .../command/OpenCourseVideoCommand.java | 20 +++++++++++++ .../pattern/behavior/command/Staff.java | 29 +++++++++++++++++++ .../pattern/behavior/command/CommandTest.java | 24 +++++++++++++++ 6 files changed, 127 insertions(+) create mode 100644 src/main/java/top/fjy8018/designpattern/pattern/behavior/command/CloseCourseVideoCommand.java create mode 100644 src/main/java/top/fjy8018/designpattern/pattern/behavior/command/Command.java create mode 100644 src/main/java/top/fjy8018/designpattern/pattern/behavior/command/CourseVideo.java create mode 100644 src/main/java/top/fjy8018/designpattern/pattern/behavior/command/OpenCourseVideoCommand.java create mode 100644 src/main/java/top/fjy8018/designpattern/pattern/behavior/command/Staff.java create mode 100644 src/test/java/top/fjy8018/designpattern/pattern/behavior/command/CommandTest.java diff --git a/src/main/java/top/fjy8018/designpattern/pattern/behavior/command/CloseCourseVideoCommand.java b/src/main/java/top/fjy8018/designpattern/pattern/behavior/command/CloseCourseVideoCommand.java new file mode 100644 index 0000000..c368903 --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/behavior/command/CloseCourseVideoCommand.java @@ -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(); + } +} diff --git a/src/main/java/top/fjy8018/designpattern/pattern/behavior/command/Command.java b/src/main/java/top/fjy8018/designpattern/pattern/behavior/command/Command.java new file mode 100644 index 0000000..47a93ed --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/behavior/command/Command.java @@ -0,0 +1,11 @@ +package top.fjy8018.designpattern.pattern.behavior.command; + +/** + * 命令抽象 + * + * @author F嘉阳 + * @date 2020/7/21 15:58 + */ +public interface Command { + void execute(); +} diff --git a/src/main/java/top/fjy8018/designpattern/pattern/behavior/command/CourseVideo.java b/src/main/java/top/fjy8018/designpattern/pattern/behavior/command/CourseVideo.java new file mode 100644 index 0000000..04b98e1 --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/behavior/command/CourseVideo.java @@ -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 + "课程视频关闭"); + } +} diff --git a/src/main/java/top/fjy8018/designpattern/pattern/behavior/command/OpenCourseVideoCommand.java b/src/main/java/top/fjy8018/designpattern/pattern/behavior/command/OpenCourseVideoCommand.java new file mode 100644 index 0000000..d20e86c --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/behavior/command/OpenCourseVideoCommand.java @@ -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(); + } +} diff --git a/src/main/java/top/fjy8018/designpattern/pattern/behavior/command/Staff.java b/src/main/java/top/fjy8018/designpattern/pattern/behavior/command/Staff.java new file mode 100644 index 0000000..8826c7d --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/behavior/command/Staff.java @@ -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 commandList = new ArrayList(); + + public void addCommand(Command command) { + commandList.add(command); + } + + public void executeCommands() { + for (Command command : commandList) { + command.execute(); + } + commandList.clear(); + } + +} diff --git a/src/test/java/top/fjy8018/designpattern/pattern/behavior/command/CommandTest.java b/src/test/java/top/fjy8018/designpattern/pattern/behavior/command/CommandTest.java new file mode 100644 index 0000000..0c8f466 --- /dev/null +++ b/src/test/java/top/fjy8018/designpattern/pattern/behavior/command/CommandTest.java @@ -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(); + } +} \ No newline at end of file