命名模式其实是比较好理解的,顾名思义,老师想让学生交作业,而不是跟每个学生都说,而是跟班长说,让学习委员传达老师的命令;三者相互解耦,任何一方都不用去依赖其他人,只需要做好自己的事儿就行!老师要的是结果,不会去关注学生到底听到了没有。
命令模式的例子:
1.定义个monitor的接口
package CommandPattern;
// 一个Monitor的接口
public interface Monitor {
void execute();
}
2.实现monitor的mymonitor的类
package CommandPattern;
/**
*类描述:实现Monitor接口的MyMonitor类
*@author: 张宇
*@date: 日期: 2018年9月5日 时间: 下午7:25:29
*@version 1.0
*/
public class MyMonitor implements Monitor {
private Student student;
public MyMonitor(Student student){
this.student=student;
}
@Override
public void execute() {
// TODO Auto-generated method stub
student.handingHomework();
}
}
3.定义一个teacher类
/**
*类描述:传递参数的Teacher对象
*@author: 张宇
*@date: 日期: 2018年9月5日 时间: 下午7:27:20
*@version 1.0
*/
public class Teacher {
private Monitor monitor;
public Teacher(Monitor monitor){
this.monitor=monitor;
}
public void action(){
monitor.execute();
}
}
4.定义一个sudent类
package CommandPattern;
/**
*类描述:Student的类
*@author: 张宇
*@date: 日期: 2018年9月5日 时间: 下午7:26:36
*@version 1.0
*/
public class Student {
public void handingHomework(){
System.out.println("上交作业!!!");
}
}
5.测试类
package CommandPattern;
/**
* 类描述:测试命令模式
*
* @author: 张宇
* @date: 日期: 2018年9月5日 时间: 下午5:57:06
* @version 1.0
*/
public class HandingHomeworkTest {
public static void main(String[] args) {
// student对象传递给MyMonitor
Student student = new Student();
Monitor cmd = new MyMonitor(student);
// MyMonitor传递给Teacher
Teacher teacher = new Teacher(cmd);
// 最后调用teacher的方法
teacher.action();
}
}
运行结果:
上交作业!!!
方法关系调用图
命令模式就是让请求和执行分开,他们之间解耦。