命令模式(Command Pattern)也被称为行动模式(Action Pattern)、事物模式(Transaction Pattern),是在 GoF 23 种设计模式中定义了的行为型模式。
命令模式 是一种数据驱动的设计模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。命令是对命令的封装,每一个命令都是一个操作,请求方发出请求,接收方接收请求,并执行操作。命令模式解耦了请求方和接收方。
~
本篇文章内容包括:关于命令模式、命令模式 Demo
命令模式(Command Pattern)也被称为行动模式(Action Pattern)、事物模式(Transaction Pattern),是在 GoF 23 种设计模式中定义了的行为型模式。
命令模式 是一种数据驱动的设计模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。命令是对命令的封装,每一个命令都是一个操作,请求方发出请求,接收方接收请求,并执行操作。命令模式解耦了请求方和接收方。
命令模式主要包含以下 4 种角色:
命令模式通常适用于以下场景。
# 关于命令模式优点
# 关于命令模式缺点
我们使用遥控操作电视,电视操作包括,打开、关闭以及换台
# Command 命令(Command)角色
public interface Command {/*** 操作命令*/void execute();
}
# ConcreteCommand 具体命令(Concrete Command)角色
public class OpenCommand implements Command{private final TV tv = new TV();/*** 打开电视机*/@Overridepublic void execute() {tv.open();}
}
public class ChangeCommand implements Command{private final TV tv = new TV();/*** 换台*/@Overridepublic void execute() {tv.change();}
}
public class CloseCommand implements Command{private final TV tv = new TV();/*** 关闭电视机*/@Overridepublic void execute() {tv.close();}
}
# Control 请求者(调用者)角色(Invoker)
import java.util.ArrayList;
import java.util.List;public class Control {public List commands = new ArrayList<>();public Control(Command command) {commands.add(command);}public Control(List commands) {this.commands.addAll(commands);}public void action() {commands.forEach(Command::execute);}
}
# TV 接收者(Receiver)角色
public class TV {public void open() {System.out.println("打开电视机");}public void change() {System.out.println("切换电视机");}public void close() {System.out.println("关闭电视机");}
}
import java.util.ArrayList;
import java.util.List;public class Client {public static void main(String[] args) {Command command = new OpenCommand();Command changeCommand = new ChangeCommand();Command closeCommand = new CloseCommand();List list = new ArrayList<>();list.add(command);list.add(changeCommand);list.add(closeCommand);Control control = new Control(list);control.action();}
}
上一篇:1. STL六大组件
下一篇:自动驾驶--预测技术