命令模式对简单的调用关系进行解耦,再大多数情况下我们可以使用直接调用的方式来做,但是如果调用比较繁琐,那么使用命令模式不失为一个好选择
这里举一个超级马里奥移动的例子来讲解命令模式
超级马里奥的动作类
1 | public class Mario { |
定义执行方法接口
1 | public interface Command { |
定义具体命令类
跳命令
1
2
3
4
5
6
7
8
9
10public class JumpCommand implements Command {
private Mario mario;
public JumpCommand(Mario mario) {
this.mario = mario;
}
@Override
public void execute() {
mario.toJump();
}
}左移命令
1
2
3
4
5
6
7
8
9
10public class LeftCommand implements Command {
private Mario mario;
public LeftCommand(Mario mario) {
this.mario = mario;
}
@Override
public void execute() {
mario.toLeft();
}
}右移命令
1
2
3
4
5
6
7
8
9
10public class RightCommand implements Command {
private Mario mario;
public RightCommand(Mario mario) {
this.mario = mario;
}
@Override
public void execute() {
mario.toRight();
}
}
命令的包装:按钮类
1 | public class Button { |
具体执行
1 | public class Main { |
命令类可以在相当程度上实现调用逻辑的解耦,但是像大家看到的一样,需要多出很多的类,但是这样设计模式的原则:对修改关闭,对扩展开放,才能提到体现