博客
关于我
命令模式
阅读量:580 次
发布时间:2019-03-09

本文共 2070 字,大约阅读时间需要 6 分钟。

说明

本文转载自:

命令(Command)

介绍

命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。

Intent

将命令封装成对象中,具有以下作用:

  • 使用命令来参数化其它对象
  • 将命令放入队列中进行排队
  • 将命令的操作记录到日志中
  • 支持可撤销的操作

Class Diagram

  • Command:命令
  • Receiver:命令接收者,也就是命令真正的执行者
  • Invoker:通过它来调用命令
  • Client:可以设置命令与命令的接收者

Implementation

设计一个遥控器,可以控制电灯开关。

public interface Command {       void execute();}
public class LightOnCommand implements Command {       Light light;    public LightOnCommand(Light light) {           this.light = light;    }    @Override    public void execute() {           light.on();    }}
public class LightOffCommand implements Command {       Light light;    public LightOffCommand(Light light) {           this.light = light;    }    @Override    public void execute() {           light.off();    }}
public class Light {       public void on() {           System.out.println("Light is on!");    }    public void off() {           System.out.println("Light is off!");    }}
/** * 遥控器 */public class Invoker {       private Command[] onCommands;    private Command[] offCommands;    private final int slotNum = 7;    public Invoker() {           this.onCommands = new Command[slotNum];        this.offCommands = new Command[slotNum];    }    public void setOnCommand(Command command, int slot) {           onCommands[slot] = command;    }    public void setOffCommand(Command command, int slot) {           offCommands[slot] = command;    }    public void onButtonWasPushed(int slot) {           onCommands[slot].execute();    }    public void offButtonWasPushed(int slot) {           offCommands[slot].execute();    }}
public class Client {       public static void main(String[] args) {           Invoker invoker = new Invoker();        Light light = new Light();        Command lightOnCommand = new LightOnCommand(light);        Command lightOffCommand = new LightOffCommand(light);        invoker.setOnCommand(lightOnCommand, 0);        invoker.setOffCommand(lightOffCommand, 0);        invoker.onButtonWasPushed(0);        invoker.offButtonWasPushed(0);    }}

JDK

你可能感兴趣的文章
Netty源码—2.Reactor线程模型一
查看>>
Netty源码—2.Reactor线程模型二
查看>>
Netty源码—3.Reactor线程模型三
查看>>
Netty源码—3.Reactor线程模型四
查看>>
Netty源码—4.客户端接入流程一
查看>>
Netty源码—4.客户端接入流程二
查看>>
Netty源码—5.Pipeline和Handler一
查看>>
Netty源码—5.Pipeline和Handler二
查看>>
Netty源码—6.ByteBuf原理一
查看>>
Netty源码—6.ByteBuf原理二
查看>>
Netty源码—7.ByteBuf原理三
查看>>
Netty源码—7.ByteBuf原理四
查看>>
Netty源码—8.编解码原理一
查看>>
Netty源码—8.编解码原理二
查看>>
Netty源码解读
查看>>
netty的HelloWorld演示
查看>>
Netty的Socket编程详解-搭建服务端与客户端并进行数据传输
查看>>
Netty的网络框架差点让我一夜秃头,哭了
查看>>
Netty相关
查看>>
Netty简介
查看>>