命令(Command)模式:将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行储存、传递、调用、增加与管理。
命令模式包含以下主要角色。
实际上,我们日常开发过程中mvc三层开发,就是一种命令模式的实现。
我们看一个其他的例子。
宠物狗的主人可以让宠物吃饭,玩耍。
命令接口类如下:
public interface Command {
/**
* 命令的执行方法
*/
void execute();
}
命令执行者如下:
/**
* 命令接收者
*/
public class Dog {
public void eat(){
System.out.println("小狗吃饭");
}
public void play(){
System.out.println("小狗玩耍");
}
}
吃饭命令类如下:
/**
* 吃饭命令类
*/
public class EatCommand implements Command{
private Dog dog;
public EatCommand(Dog dog) {
this.dog = dog;
}
@Override
public void execute() {
dog.eat();
}
}
玩耍命令类如下:
/**
* 玩耍命令类
*/
public class PlayCommand implements Command{
private Dog dog;
public PlayCommand(Dog dog) {
this.dog = dog;
}
@Override
public void execute() {
dog.play();
}
}
命令发起者如下:
/**
* 命令发起者
*/
public class Human {
private Command command;
public void setCommand(Command command) {
this.command = command;
}
public void call(){
command.execute();
}
}
测试类如下:
public class CommandTest {
public static void main(String[] args) {
Dog dog = new Dog();
EatCommand eatCommand = new EatCommand(dog);
PlayCommand playCommand = new PlayCommand(dog);
Human human = new Human();
human.setCommand(eatCommand);
human.call();
human.setCommand(playCommand);
human.call();
}
}
运行结果如下: