java设计模式-----命令模式

来源:互联网 发布:c语言四则运算程序问题 编辑:程序博客网 时间:2024/05/17 02:40

                                                                                                                  java设计模式-----命令模式

              对于命令模式,说简单点就是对于完成一件事,处理的行为,和具体的处理的方法的分离。假设:有个方法需要某个数组的数组元素,但是无法确定如何处理这些元素,需要在调用该方法时指定具体的处理行为。

              对于这样的需求,我们应该把处理的行为作为参数传入,处理的行为编程实现就是一段代码,java 不支持给方法传入代码,但是它提供了接口,所以我们可以把处理的行为定义成接口:

              //定义一个处理方法的接口
                 public interface Command {
                              void process(int [] target); 
                } 

               该接口只是定义了个方法但是没有方法体-----------还无法确定处理的行为,所以要定义处理数组的类在该类里定义处理方法的行为,由于处理的行为的不确定性,所以定义接口参数。

             //通过接口作为参数实现了处理方法的类ProcessArray 和行为的分离,因为command只是一个接口,具体的行为还需要传入真正的command 对象,才可确定数组的行为,也就是实现command接口的类

             public class ProcessArray {
                            public void process(int []target,Command cmd)
                            {

                         cmd.process(target);
                            }
                        }

         //假若行为1是做加法

           public class Commandtest1  implements Command
             {
                    int a=5;
             @Override
                  public void process(int[] target) {
             // TODO Auto-generated method stub
             for (int i = 0; i < target.length; i++) {
                 target[i]+=a;
              }
          for (int i : target) {
            System.out.print(i+"  ");
              }
            }
            }

          // 假若行为2是做减法

           public class Commandtest2 implements Command
             {
                 int a=5;
          @Override
         public void process(int[] target) {
             // TODO Auto-generated method stub
             for (int i = 0; i < target.length; i++) {
      target[i]-=5;
             }
           for (int i : target) {
       System.out.print(i+" ");
           }
           }
            }

                //定义主类

public class Commandtest2 implements Command
{
    int a=5;
@Override
public void process(int[] target) {
// TODO Auto-generated method stub
for (int i = 0; i < target.length; i++) {
target[i]-=5;
}
for (int i : target) {
System.out.print(i+" ");
}
}
}


  所以命令模式我个人觉得最彻底的理解就是,处理的具体的行为和方法的分离。和前面的工厂模式,他们都是面向接口的编程,在表面上来看他们的灵活习惯很强,但是仔细推敲,好像在具体产生实例的过程中还是存在逻辑的判 断,所以对于java而言解决方案,Spring框架提出了解决方案(利用泛型和映射),对于这个人还在学习中。。。

            最后个人的某些方面理解不足,欢迎志同道合的人前来切磋微笑!!



0 0
原创粉丝点击