一需求背景
用命令模式实现打印出数组各个元素的值以及各元素之和。
二代码示例
public interface Command
{
// 接口里定义的process()方法用于封装“处理行为”
void process(int[] target);
}
public class ProcessArray
{
public void process(int[] target , Command cmd)
{
cmd.process(target);
}
}
public class CommandTest
{
public static void main(String[] args)
{
ProcessArray pa = new ProcessArray();
int[] target = {3, -4, 6, 4};
// 第一次处理数组,具体处理行为取决于PrintCommand
pa.process(target , new PrintCommand());
System.out.println("------------------");
// 第二次处理数组,具体处理行为取决于AddCommand
pa.process(target , new AddCommand());
}
}
public class PrintCommand implements Command
{
public void process(int[] target)
{
for (int tmp : target )
{
System.out.println("迭代输出目标数组的元素:" + tmp);
}
}
}
public class AddCommand implements Command
{
public void process(int[] target)
{
int sum = 0;
for (int tmp : target )
{
sum += tmp;
}
System.out.println("数组元素的总和是:" + sum);
}
}
三运行结果
迭代输出目标数组的元素:3
迭代输出目标数组的元素:-4
迭代输出目标数组的元素:6
迭代输出目标数组的元素:4
------------------
数组元素的总和是:9
四结果分析
该代码是用命令模式实现的,在该需求中类ProcessArray中的process方法需要分别完成两个行为(打印或求和),但这两个行为的具体实现无法确定,必须等到执行该方法时才可以确定。具体说来:process方法需要遍历某个数组的元素,但无法确定在遍历数组时如何处理这些元素,需要在调用该方法时指定具体的处理行为。
对于PrintCommand和AddCommand两个实现类而言,实际有意义的部分就是process(int[] target)方法,该方法的方法体就是传入ProcessArray类里的process()方法的"处理行为",通过这种方式就可实现process()方法和"处理行为"的分离。