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+"\n");
}
}
});
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="https://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="https://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>