zoukankan      html  css  js  c++  java
  • 面向接口编程(二)

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

      我们或许会遇到这样的问题,当某个方法要完成某一行为时,这个行为的具体实现无法实现确定,必须在调用这个方法时才可以确定,这种场景就是所谓的命令模式,但是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当做方法处理时的传入参数,在调用这个方法时才能确定。

  • 相关阅读:
    后台http请求参数为json 【转】
    【转】java获取当前年、月、日 、小时 、分钟、 秒、 毫秒
    java 增强for循环对于空集和null的判断
    jquery中对地址中的中文进行encodeURI编码
    System.arraycopy() 数组复制方法
    增强for循环的简单总结
    【转载】oracle中decode函数用法
    【转载】用jquery给select option 赋值
    【转载】execute、executeUpdate、executeQuery三者的区别(及返回值)
    小程序table正确姿势
  • 原文地址:https://www.cnblogs.com/Shevo/p/8449653.html
Copyright © 2011-2022 走看看