Java设计模式之命令模式

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

类图可以这样来解释:最底部的是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、付费专栏及课程。

余额充值