Command命令设计模式

命名模式其实是比较好理解的,顾名思义,老师想让学生交作业,而不是跟每个学生都说,而是跟班长说,让学习委员传达老师的命令;三者相互解耦,任何一方都不用去依赖其他人,只需要做好自己的事儿就行!老师要的是结果,不会去关注学生到底听到了没有。


命令模式的例子:

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();
	}
}

运行结果:

上交作业!!!

                         

                                                                 方法关系调用图 


命令模式就是让请求和执行分开,他们之间解耦。

猜你喜欢

转载自blog.csdn.net/zy345293721/article/details/82429423