Java接口的命令模式用法

来源:互联网 发布:免费淘宝客程序源码 编辑:程序博客网 时间:2024/04/29 05:33

在Java中,接口是一种特殊的存在,它体现的是一种规范和实现分离的设计哲学,充分利用接口可以极好地降低程序各个模块之间的耦合,从而提高系统的可扩展性和可维护性。基于这种规则,很多软件架构设计理念都倡导“面向接口编程”,而不是面向实现类编程,下面介绍的命令模式则是面向接口编程的一种。

考虑这一场景,摸个方法需要完成一个行为,但是这个行为举行的实现逻辑无法确定,必须等到执行该方法的时候才能确定,这个时候我们就可以采取面向接口变成,即制定一个接口,通过不同的实现该接口的类,实现同一个方法的不同实现逻辑。这也体现了面向对象的三大特征之一,多态性。

假设一个需求,我们需要遍历某个数组,但是并不知道在遍历该数组时该如何处理这些元素。首先,我们定义接口,在该接口定义一个抽象方法用于处理一个数组。

public interface Command {
    void process(int[] target);
}

接下来,有两个Java实现Command接口,在两个类中分别实现了process方法,处理了不同的业务逻辑。

//打印出数组中的每个元素

public class PrintCommand implements Command{
    public void process(int[] target){
        for(int tmp:target){
            System.out.print(tmp);
        }
        System.out.println();
    }
}

//对数组元素进行求和并输出

public class AddCommand implements Command {
    public void process(int[] target){
        int sum = 0;
        for (int i = 0; i < target.length; i++) {
            sum += target[i];
        }
        System.out.println(sum);
    }
}

我们再定义个需要处理数组的处理类,在这个类中包含process方法,在该方法中无法确定数组的处理行为,因此在该方法传入一个Command参数,用于对数组的处理。

public class ProcessArray {
    public void process(int[] target,Command cmd){
        cmd.process(target);
    }
}


最后创建测试类:

public class CommandTest {
    public static void main(String[] args){
        ProcessArray processArray = new ProcessArray();
        int[] arr = {1,2,3,4,5,6,7};
        processArray.process(arr,new PrintCommand());
        processArray.process(arr,new AddCommand());
    }
}


输出结果是:

1234567
28

我们可以看出,通过传入不同的实现Command接口的类作为参数,产生不同的效果,也就是process方法和具体行为的分离,这样设计的好处是降低程序各个模块之间的耦合度,是一种好的变成模式。

0 0