欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

命令模式

程序员文章站 2022-05-27 21:26:25
...

一需求背景

用命令模式实现打印出数组各个元素的值以及各元素之和。

 

二代码示例

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()方法和"处理行为"的分离。