sshpass命令执行不了_Java设计模式之命令模式

命令模式下的Java功能模块划分主要有以下三个部分,一是调用者,二是命令,三是执行者。通常情况下,调用者通过执行其action()方法,完成某一功能,而action()方法的具体实现,由具体的命令类和执行者类来实现。这种模式要实现的功能在于,对功能模块的封装,使得上层调用者仅需根据命令的不同,来执行命令,而不需要知道命令实现的细节。

首先来看命令模式的类图关系:

e2fd69e5b931b339d16182808b13dc6c.png

类图可以这样来解释:最底部的是Client,测试入口,它通过调用Invoker(调用者),并下达具体的命令Command1和Command2,来完成一个功能操作。其中Invoker依赖于Command(命令)类,而Command类依赖于具体的执行者Operator类。Command以及Operator类通常被设定为抽象类,并由这二者衍生出具体的命令类以及执行者类。

其实例代码,分别如下:

Operator.java

/**

* Created by Song on 2016/10/21.

* 抽象执行者

*/

public abstract class Operator {

public abstract void doSomething();

}

Operator1.java

/**

* Created by Song on 2016/10/21.

* 具体执行者1

*/

public class Operator1 extends Operator {

@Override

public void doSomething() {

System.out.println("双脚并拢,腰挺直,这是立正命令");

Operator2.java

/**

* Created by Song on 2016/10/21.

* 具体执行者2

*/

public class Operator2 extends Operator {

@Override

public void doSomething() {

System.out.println("右脚向前,这是稍息命令");

}

}

Command.java

/**

* Created by Song on 2016/10/21.

* 抽象命令

*/

public abstract class Command {

//依赖的执行者

protected Operator operator;

public Command(Operator _operator){this.operator=_operator;}

//执行命令

public abstract void execute();

}

Command1.java

/**

* Created by Song on 2016/10/21.

* 具体命令1

*/

public class Command1 extends Command {

public Command1(Operator _operator){super(_operator);}

public Command1(){super(new Operator1());}

@Override

public void execute() {

super.operator.doSomething();

}

}

Command2.java

/**

* Created by Song on 2016/10/21.

* 具体命令2

*/

public class Command2 extends Command {

public Command2(Operator _operator){super(_operator);}

public Command2(){super(new Operator2());}

@Override

public void execute() {

super.operator.doSomething();

}

}

Invoker.java

/**

* Created by Song on 2016/10/21.

* 调用者

*/

public class Invoker {

private Command command;

public void setCommand(Command _command){this.command = _command;}

public void action(){

this.command.execute();

}

}

测试方法Client.java

public class Client {

public static void main(String [] args){

//初始化调用者

Invoker invoker = new Invoker();

//执行命令1

invoker.setCommand(new Command1());

invoker.action();

//执行命令2

invoker.setCommand(new Command2());

invoker.action();

}

}

测试结果:

*双脚并拢,腰挺直,这是立正命令

右脚向前,这是稍息命令*

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值