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当做方法处理时的传入参数,在调用这个方法时才能确定。

  • 相关阅读:
    【java】一维数组循环位移方阵
    【java】for循环输出数字金字塔
    C++编程tips
    C++中cin.get 和cin.peek 及其相关的用法
    ubuntu增加字符设备驱动程序/ 操作系统课程设计
    C++ Primer 学习笔记/ 处理类型
    C++学习,顶层const
    C++学习笔记/const和指针
    ubuntu16.04增加系统调用(拷贝)
    Java学习笔记#数组 循环遍历
  • 原文地址:https://www.cnblogs.com/Shevo/p/8449653.html
Copyright © 2011-2022 走看看