码迷,mamicode.com
首页 > 其他好文 > 详细

面向接口编程(二)

时间:2018-02-15 17:52:57      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:面向接口编程   测试   index   inter   string   new   ati   功能   分离   

  上一周我写了采取简单工厂模式的面向接口编程的方法,这周我来介绍另一种模式——命令模式。

  我们或许会遇到这样的问题,当某个方法要完成某一行为时,这个行为的具体实现无法实现确定,必须在调用这个方法时才可以确定,这种场景就是所谓的命令模式,但是Java并不能直接将方法体当参数传入,这时我们就用到了面向接口编程的方式。

  假如我们要定义一个处理数组的类ArrayHandler,但这是不知道具体怎么处理,首先要有一个借口去定义数组处理方法(就是一个数组处理规范)

  

public interface Handler {

    public void handler(int target[]);
}

 

定义ArrayHandler,我们只要将接口当做参数传入即可

public class ArrayHandler {
    
    //Handler是处理数组的接口,利用Handler处理目标数组
    public void handler(int target[],Handler hd){
        hd.handler(target);
    }
  //测试
public static void main(String[] args){ int[] target = {1,2,3,4,5,6,7,8,9,10,11}; ArrayHandler ah = new ArrayHandler(); ah.handler(target, new PrintArray()); ah.handler(target, new AddArray()); }
}

下面是AddArray和PrintArray的代码,很简单就可以实现,这样就做到了让ArrayHandler和处理行为分离。程序使用Handler接口代表对数组的处理,只有等到真正调用handler方法时

才确定对数组的处理行为。

public class AddArray implements Handler{

    int sum = 0;
    public void handler(int[] target) {
        for(int index=0;index<target.length;index++){
            sum += target[index];
        }
        System.out.println("目标数组和为:" + sum);
    }

}
public class PrintArray implements Handler{

    public void handler(int[] target) {
        System.out.print("目标数组为:" + target[0] + " ");
        for(int index=1;index<target.length;index++){
            if(index%10 !=0)
                System.out.print(target[index] + " ");
            else
                System.out.println(target[index] + " ");
                
        }
    }

}

  总结两种面向接口编程的方式,区别就是简单工厂模式是将方法行为规范单做成员变量传入,以Computer与Output为例,Output是Computer的一个功能,这个功能是已知的,

就将Output当做Computer的一个Field。

  而Handler对于ArrayHandler在调用之前是未知的,这时将Handler当做方法处理时的传入参数,在调用这个方法时才能确定。

面向接口编程(二)

标签:面向接口编程   测试   index   inter   string   new   ati   功能   分离   

原文地址:https://www.cnblogs.com/Shevo/p/8449653.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!