JAVA开发的23种设计模式之 --- 命令模式

命令模式
  • 概述:将请求封装成一个对象,从而使我们可用不同的请求对客户进行参数化
  • 解决的问题:在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系.但是在某些场合.需要对行为进行记录,撤销/重做,事务等处理.这种无法抵御变化的紧耦合是不合适的.在这种情况下就需要将"行为请求者”与”行为实现者”解耦,将一组行为抽象成对象.可以实现二者之间的松耦合.
  • 命令模式所包含的角色
    • 命令角色(Command):定义命令的接口
    • 具体命令角色(Concrete Command):实现命令接口声明的方法,通常会有命令执行者参数,并且调用执行者的方法来完成命令要执行的操作.
    • 执行者角色(Receiver):负责具体实施和执行一个请求.任何类都可能会成为一个执行者,只要它能够实现命令要求实现的功能
    • 请求者角色(Invoker):负责调用命令对象执行请求
  • 优点
    • 降低了系统的耦合度,这样请求者和调用者是没有任何依赖关系的,他们是通过一个具体的命令而连接的
    • 新的命令可以很容易的添加到系统中去,多一个具体的命令加一个实现Command的子类就可以了
  • 缺点
    • 可能会导致某些系统有过多的具体命令类




代码实现
     示例:现在有一个bug需要解决,公司Boss下令去让程序员去解决.这个过程是:公司Boss发出命令,命令传递到程序员本人,程序员解决bug.使用命令模式使得三者相互解耦,这样Boss不需要知道是怎么做的,也不需要知道是哪一个程序员做的.只需要知道bug修改好了就可以了.

执行者角色 

package Command;

/**
 * Created by looper on 2017/8/21.
 */
public class Receiver {
  private String name;

  public Receiver(String name){
    this.name = name;
  }

  //执行者的执行方法
  public void operator(){
    System.out.println(name + " 已经接收到命令,开始执行");
  }
}
命令角色接口

package Command;

/**
 * Created by looper on 2017/8/21.
 */
public interface Command {
  public void execute();
}
具体命令角色角色类

package Command;

/**
 * Created by looper on 2017/8/21.
 */
public class ConcreteCommand implements Command {
  private Receiver receiver;

  public ConcreteCommand(Receiver receiver){
    this.receiver = receiver;
  }
  @Override
  public void execute() {
    //调用执行者的执行方法
    receiver.operator();
  }

}
请求者角色类

package Command;

/**
 * Created by looper on 2017/8/21.
 */
public class Invoker {
  private Command command;

  public Invoker(Command command) {
    this.command = command;
  }

  //boss发出命令的方法
  public void action() {
    command.execute();
  }
}
测试类
package Command;

/**
 * Created by looper on 2017/8/21.
 */
public class CommandTest {
  public static void main(String[] args) {
    //创建一个程序员 name = "坑露"
    Receiver programmer = new Receiver("坑露");
    //为这个命令指定一个执行者
    Command command = new ConcreteCommand(programmer);

    //为这个命令指定一个调用者
    Invoker boss = new Invoker(command);
    //执行
    boss.action();
  }
}


输出:
坑露 已经接收到命令,开始执行 




我将23种设计模式的全部代码上传到CSDN,有用得到的同学 可以去下载.

下载地址 : 点我



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叶孤心丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值