面向接口编程:命令模式

主讲教师:王少华   QQ群号:483773664

学习目标

  1. 理解面向接口编程的优势

  2. 掌握命令模式


一、命令模式

(一)场景

假设你的Boss给你这样一个任务要你处理一个数组。但是没有告诉你,如何处理这个数组,是对其进行输出,还是对其排序。遇到这样的Boss很烦!!!

(二) 分析

对于这样的需求,我们第一个想到的就是把数组作为方法的形参,但是我们是否可以把“对数组的处理行为“也作为一个方法的形参传入呢?

因为Java不允许代码块的单独存在,所以我们不可能将”处理行为“作为形参传入。

我们可以使用一个Command接口来定义一个方法,用这个方法来封装”处理行为“,然后将Command作为方法形参。

(三)代码实现

1、Command

1
2
3
4
5
6
7
public interface Command {
    /**
     * 用于封装对数组处理的行为
     * @param target
     */
    public void process(int[] target);
}

2、ProcessArray

这是一数组处理类,里面有一个方法process,这个方法无法确定处理的数据的处理行为,所以定义该方法时,使用了一个Command参数,这个Command参数负责对数组的处理行为。

1
2
3
4
5
public class ProcessArray {
    public void process(int[] target,Command command){
        command.process(target);
    }
}

3、PrintArrayCommand:打印数组

1
2
3
4
5
6
7
8
public class PrintArrayCommand implements Command{
    @Override
    public void process(int[] target) {
        for (int i = 0; i < target.length; i++) {
            System.out.println(target[i]);
        }
    }
}

4、Test

1
2
3
4
5
6
7
8
public class Test {
    public static void main(String[] args) {
        int[] arr = {2,13,212,3,34};
        Command command = new PrintArrayCommand();
        ProcessArray processArray = new ProcessArray();
        processArray.process(arr, command);
    }
}

(四)总结

通过一个Command接口,就实现了让ProcessArry类和具体”处理行为‘的分离。Command接口也没有提供真正的处理,只有等到需要调用ProcessArray对象的process方法时,才真正传入一个Command对象,才能确定对数组的处理行为。