Java命令模式轻松理解
Java命令模式轻松理解
情景:某个方法需要实现一个行为,但是这个行为的具体实现却无法确定,必须等到执行这个方法的时候才能确定。
考虑:这个方法不仅需要普通数据可以变化,而且方法执行体也需要改变,将“处理行为”作为一个参数传入该方法不失为一种方法
结论:但是java目前的jdk1.6版本不想Ruby语言支持袁旭传入一个代码块作为参数
如何实现这种呢,假如一个方法需要遍历一组数组,但是无法确定在遍历的时候如何处理这些数据,需要在调用该方法时指定具体的做法:
interface:
- public interface Command {
- //由于jdk1.6中不允许传入一个代码块作为参数,
- //这里定义一个方法来封装 处理过程
- void process(int [] target);
- }
- public class AddCommand implements Command {
- @Override
- public void process(int[] target) {
- int sum=0;
- for(int k:target){
- sum+=k;
- }
- System.out.println("数组和是:"+sum);
- }
- }
- public class PrintCommand implements Command {
- @Override
- public void process(int[] target) {
- for(int k :target){
- System.out.println("依次输出数组元素:"+k);
- }
- }
- }
- public class ProcessArray {
- public void process(int [] target,Command cmd){
- cmd.process(target);
- }
- }
TestCommand(测试类):
- public class TestCommand {
- public static void main(String [] args){
- ProcessArray pra=new ProcessArray();
- int [] target={1,2,3,4,5};
- //处理行为依赖于PrintCommand
- pra.process(target, new PrintCommand());
- System.out.println("******");
- //处理行为依赖于AddCommand()
- pra.process(target, new AddCommand());
- }
对于上面两个Print和AddCommand实现类,就是为了实现方法process(int 【】 target),而该方法也就是处理类ArrayProcess里process方法的处理行为。
这样,就实现process方法和处理行为的分离。
评论暂时关闭