(18)命令模式

概念

  1. 老师发布打开课本的命令,学生听到这个命令就打开课本。老师发布阅读的命令,学生听到命令后就开始阅读。
  2. 如果用普通的方式去写代码,那么老师和学生之间就存耦合关系。比如老师直接调用学生的打开课本方法,学生就打开课本。老师调用学生的阅读方法,学生就开始阅读。这样老师和学生就存在耦合关系。
  3. 而命令模式主要为了让老师和学生之间解耦。比如老师不操作学生的打开课本方法,而是老师发布一条命令,然后学生就根据命令去执行。
  4. 简单的说,就是老师和学生是没有任何关系的,老师要操作学生的方法,需要通过一个命令去操作学生的方法。【命令模式可将“动作的请求者(老师)”从“动作的执行者(学生)”解耦出来】

实现方式

import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

/**
 * 命令
 */
public class Demo {
    public static void main(String[] args) {
        List<Student> stuList = IntStream.range(0, 5)
                .mapToObj(i -> new Student("张三" + i))
                .collect(Collectors.toList());
        // 创建一个命令,命令由多个学生去执行
        StudentCommand studentCommand = new StudentCommand(stuList);

        Thacher thacher = new Thacher();
        System.out.println("========= 老师发布打开课本命令 =========");
        thacher.openBookCommand(studentCommand);
        System.out.println("========= 老师发布阅读命令 =========");
        thacher.readCommand(studentCommand);
    }
}

// 命令接口,所有命令都要实现该接口
interface Command {
    void openBook();

    void read();
}

// 具体的命令
class StudentCommand implements Command {
    // 多个学生,老师发布一条命令,多个学生都要执行
    List<Student> stuList;

    public StudentCommand(List<Student> stuList) {
        this.stuList = stuList;
    }

    @Override
    public void openBook() {
        stuList.forEach(Student::openBook);
    }

    @Override
    public void read() {
        stuList.forEach(Student::read);
    }
}

// 学生(命令的接受者)
class Student {
    String name;

    public Student(String name) {
        this.name = name;
    }

    public void openBook() {
        System.out.println("学生 " + name + " 打开了课本");
    }

    public void read() {
        System.out.println("学生 " + name + " 开始读书");
    }
}

// 老师(命令的发布者)
class Thacher {
    public void openBookCommand(Command command) {
        command.openBook();
    }

    public void readCommand(Command command) {
        command.read();
    }
}

========= 老师发布打开课本命令 =========
学生 张三0 打开了课本
学生 张三1 打开了课本
学生 张三2 打开了课本
学生 张三3 打开了课本
学生 张三4 打开了课本
========= 老师发布阅读命令 =========
学生 张三0 开始读书
学生 张三1 开始读书
学生 张三2 开始读书
学生 张三3 开始读书
学生 张三4 开始读书

posted @ 2021-12-07 16:31  、嘎路的米。  阅读(35)  评论(0编辑  收藏  举报