Java设计模式设计模式

《设计模式》命令模式

2019-08-25  本文已影响2人  敏捷Studio

基本介绍

定义

将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录日志,可以提供命令的撤销和恢复功能。

介绍

UML类图

命令模式UML类图

角色说明:

具体实现

以计算机关机为例

1、创建命令角色。定义一个抽象的执行方法:

public interface Command {
  // 执行命令
  void execute();
}

2、创建具体命令角色。创建一个关机命令:

// 关机命令
public class ShutdownCommand implements Command {
  // 接受者
  private Receiver receiver;

  public ShutdownCommand(Receiver receiver) {
    this.receiver = receiver;
  }

  @Override
  public void execute() {
    System.out.println("命令角色执行关机命令");
    // 调用接受者
    receiver.action();
  }
}

3、创建调用者角色

// 调用者
public class Invoker {
  private Command command;

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

  public void action() {
    System.out.println("调用者执行命令");
    command.execute();
  }
}

4、创建接收者角色。执行具体的关机操作:

public class Receiver {
  // 接收者执行具体的操作
  public void action() {
    System.out.println("接收者执行具体的操作");
    System.out.println("开始执行关机操作:");
    System.out.println("退出所有程序进程");
    System.out.println("关机~");
  }
}

5、客户端测试:

public void test() {
  // 创建命令接收者
  Receiver receiver = new Receiver();
  // 创建一个命令的具体实现对象,并指定命令接收者
  Command command = new ShutdownCommand(receiver);
  // 创建一个命令调用者,并指定具体命令
  Invoker invoker = new Invoker(command);
  // 发起调用命令请求
  invoker.action();
}

输出结果:

调用者执行命令
命令角色执行关机命令
接收者执行具体的操作
开始执行关机操作:
退出所有程序进程
关机~

6、说明:

模式总结

应用场景

优点

缺点

Android中的源码分析

1、线程类
实际上Thread的使用就是一个简单的命令模式,先看下Thread的使用:

new Thread(new Runnable() {
  @Override
    public void run() {
      // doSomeThing
    }
}).start();

Threadstart()方法即命令的调用者,同时Thread的内部会调用Runnablerun(),这里Thread又充当了具体的命令角色,最后的Runnable则是接受者了,负责最后的功能处理。

2、Handler
另一个比较典型的常用到命令模式就是Handler了,这里就不贴代码了,简单分析下各个类的角色:
接受者:Handler 执行消息的处理操作。
调用者:Looper 调用消息的的处理方法。
命令角色:Message 消息类。

上一篇下一篇

猜你喜欢

热点阅读