学习路径: https://coding.imooc.com/class/270.html
- 应用场景
public static void main(String[] args) {
Course course = new Course("高数课");
// 开课命令的实例
OpenCourseVideoCommand openCourseVideoCommand = new OpenCourseVideoCommand(course);
// 结课命令的实例,如果要多种命令,实现CourseVideoCommand接口新建一个类即可
CloseCourseVideoCommand closeCourseVideoCommand = new CloseCourseVideoCommand(course);
// 新建执行者实例
Executor executor = new Executor();
// 执行者可以将命令收集
executor.addCommand(openCourseVideoCommand);
executor.addCommand(closeCourseVideoCommand);
// 统一执行命令
executor.execute();
// 清除所有待执行命令
executor.clearCommand();
}
- 实现
/**
* 新增命令的类型,提供标准
*/
public interface CourseVideoCommand {
void execute();
}
public class CloseCourseVideoCommand implements CourseVideoCommand {
private Course course;
public CloseCourseVideoCommand(Course course) {
this.course = course;
}
@Override
public void execute() {
System.out.println(course.getCourseName()+ "已被关闭");
}
}
/**
* 命令模式核心类,执行者
*/
public class Executor {
// 先进先出,适合ArrayList
private ArrayList<CourseVideoCommand> commandArrayList = new ArrayList<>();
public void addCommand(CourseVideoCommand courseVideoCommand){
commandArrayList.add(courseVideoCommand);
}
public void clearCommand(){
commandArrayList.clear();
}
public void execute(){
// 遍历集合,依次执行自定义方法
for (CourseVideoCommand command : commandArrayList) {
// 多态的实现
command.execute();
}
}
}
- 命令模式使用了链表的数据结构,用多态的特性存放不同的命令。如果要拓展多个命令,只需要新增对应的实现类即可。