博客
关于我
命令模式
阅读量: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工作笔记0054---EventLoop组件
查看>>
Netty工作笔记0055---Unpooled应用实例1
查看>>
Netty工作笔记0056---Unpooled应用实例2
查看>>
Netty工作笔记0057---Netty群聊系统服务端
查看>>
Netty工作笔记0058---Netty群聊系统客户端
查看>>
Netty工作笔记0059---Netty私聊实现思路
查看>>
Netty工作笔记0060---Netty心跳机制实例
查看>>
Netty工作笔记0060---Tcp长连接和短连接_Http长连接和短连接_UDP长连接和短连接
查看>>
Netty工作笔记0061---Netty心跳处理器编写
查看>>
Netty工作笔记0062---WebSocket长连接开发
查看>>
Netty工作笔记0063---WebSocket长连接开发2
查看>>
vue样式穿透 ::v-deep的具体使用
查看>>
Netty工作笔记0065---WebSocket长连接开发4
查看>>
Netty工作笔记0066---Netty核心模块内容梳理
查看>>
Vue基本使用---vue工作笔记0002
查看>>
Netty工作笔记0068---Protobuf机制简述
查看>>
Netty工作笔记0069---Protobuf使用案例
查看>>
Netty工作笔记0070---Protobuf使用案例Codec使用
查看>>
Netty工作笔记0071---Protobuf传输多种类型
查看>>
Netty工作笔记0072---Protobuf内容小结
查看>>