linkin大话设计模式--命令模式

linkin大话设计模式--命令模式

首先考虑一种应用情况,某个方法需要完成某一个功能,这个功能的大部分功能已经确定了,但是有可能少量的步骤没法确定,必须等到执行这个方法才可以确定。
也就是说,我们写一个方法不仅要求参数可以变化,其中对参数的处理也需要变化,不是写在这个方法的代码逻辑中,是对于这个参数的处理也要传入到这个方法中,那么怎么做呢?命令模式。


不同于js可以在一个方法中参入一个代码块,java中不允许代码块单独存在,因此我们必须把该代码块封装成一个方法,在java中类是一等公民,方法也不能独立的存在,所以我们传入该方法的应该是一个对象,该对象通常是某个接口的匿名实现类的实例,这个接口我们称为命令接口。


具体代码如下:

<strong><span style="font-size:14px;">//定义一个接口  这个就是一会要传入下面方法的处理行为 这个接口叫做命令接口
interface Command{
    public void process(int[] target);
}


public class ProcessArray {
    //这个方法里面的cmd就是一个代码块
    public void each(int[] target,Command cmd){
        cmd.process(target);
    }
    
    public static void main(String[] args) {
        ProcessArray processArray = new ProcessArray();
        int[] target = {1,2,3,4};
        //执行each方法,但是这里的第2个参数不是一个普通的参数,而是一个代码块
        processArray.each(target, new Command(){
            @Override
            public void process(int[] target) {
                for(int a:target){
                    System.out.println(a+"
");
                }
            }
        });
        processArray.each(target, new Command() {
            @Override
            public void process(int[] target) {
                int sum = 0;
                for(int a:target){
                    sum+=a;
                }
                System.out.println("sum="+sum);
            }
        });
    }
}</span></strong>
<pre name="code" class="java"><pre name="code" class="java"><pre name="code" class="java"><strong><span style="font-size:14px;"><img src="http://img.blog.csdn.net/20141006131515651?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMTc5NDIzOA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" /></span></strong>


<strong><span style="font-size:14px;"><img src="http://img.blog.csdn.net/20141006131623480?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMTc5NDIzOA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" style="font-family: Arial, Helvetica, sans-serif;" alt="" /></span></strong>






原文地址:https://www.cnblogs.com/LinkinPark/p/5233189.html