博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
命令模式
阅读量:577 次
发布时间:2019-03-09

本文共 2088 字,大约阅读时间需要 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

你可能感兴趣的文章