前言
本章讲解设计模式中命令设计模式的相关知识
方法
1.概念
在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需要对行为进行记录、撤销或重做、事务等处理时,这种无法抵御变化的紧耦合的设计就不太合适。
比如说老板给员工下达命令,让其执行任务。那么简单的条件下老板的方法可以直接耦合员工对象,调用员工对象进行操作。那么一旦这个命令比较复杂,在执行的前后需要进行相关的操作,那么原来的设计就显得鸡肋了。
这个时候我们可以采用命令设计模式,将员工的执行方法转化为类.
2.命令设计模式的实现思路
1)创建相应的工程
2)创建命令的调用者,也就是我们的老板
package command;
/**
* 老板类,命令的发送者,这里假设接收一个命令
* @author jwang
*
*/
public class Boos {
private Command command;
public Boos(Command command) {
super();
this.command = command;
}
public void command(){
this.command.execute();
}
}
3)创建员工类
package command;
/**
* 工人类,具体的命令执行者
* @author jwang
*
*/
public class Worker {
private String name;
public Worker(String name) {
super();
this.name = name;
}
public void work(){
System.out.println("员工【"+name+"】工作!");
}
public void study(){
System.out.println("员工【"+name+"】学习!");
}
}
4)创建命令抽象类以及具体的实现
package command;
/**
* 命令接口
* @author jwang
*
*/
public interface Command {
public void execute();
}
两个命令的实现类对应命令执行者的两个方法的执行
StudyCommand:
package command;
/**
* 具体要执行的命令,学习的命令
* @author jwang
*
*/
public class StudyCommand implements Command {
private Worker worker;
public StudyCommand(Worker worker) {
super();
this.worker = worker;
}
@Override
public void execute() {
this.worker.study();
}
}
WorkCommand:
package command;
/**
* 具体要执行的命令,工作的命令
* @author jwang
*
*/
public class WorkCommand implements Command {
private Worker worker;
public WorkCommand(Worker worker) {
super();
this.worker = worker;
}
@Override
public void execute() {
this.worker.work();
}
}
5)编写测试代码进行测试
package command;
public class Test {
public static void main(String[] args) {
//定义两组命令,分别由两个人执行
StudyCommand studyCommand = new StudyCommand(new Worker("张三"));
WorkCommand workCommand = new WorkCommand(new Worker("李四"));
//执行命令
System.out.println("使用命令模式...");
new Boos(studyCommand).command();
new Boos(workCommand).command();
//在较为简单的条件下,不用命令模式,耦合度较大
System.out.println("不使用命令模式...");
new Worker("张三").study();
new Worker("李四").work();
}
}
程序执行结果如下: