命令模式
程序员文章站
2022-04-16 20:22:04
...
一需求背景
用命令模式实现打印出数组各个元素的值以及各元素之和。
二代码示例
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()方法和"处理行为"的分离。
上一篇: php接口的使用