設計模式系列(圖文解析,附帶原始碼) - 命令
2. 命令(Command)
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
相關文章
- 設計模式系列(圖文解析,附帶原始碼) - 模板方法設計模式原始碼
- 設計模式系列(圖文解析,附帶原始碼)- 空物件設計模式原始碼物件
- 設計模式系列(圖文解析,附帶原始碼) - 生成器設計模式原始碼
- 設計模式系列(圖文解析,附帶原始碼) - 介面卡設計模式原始碼
- 【圖解設計模式系列】The Command Pattern: 命令列模式圖解設計模式命令列
- 設計模式系列 6– 命令模式設計模式
- 【趣味設計模式系列】之【代理模式3--Cglib動態代理原始碼解析】設計模式CGLib原始碼
- 【趣味設計模式系列】之【代理模式2--JDK動態代理原始碼解析】設計模式JDK原始碼
- Gson原始碼解析和它的設計模式原始碼設計模式
- 設計模式(十)——組合模式(HashMap原始碼解析)設計模式HashMap原始碼
- 設計模式(十五)——命令模式(Spring框架的JdbcTemplate原始碼分析)設計模式Spring框架JDBC原始碼
- 軟體設計模式系列之十六——命令模式設計模式
- JavaScript設計模式系列二之建造者模式(附案例原始碼)JavaScript設計模式原始碼
- 設計模式之釋出訂閱模式(5) Spring Events原始碼解析設計模式Spring原始碼
- 一文掌握介面卡設計模式,UML圖解原始碼簡單易懂設計模式圖解原始碼
- Android原始碼設計模式-模板模式Android原始碼設計模式
- 軟體設計模式白話文系列(十四)策略模式設計模式
- Dubbo架構設計與原始碼解析(三)責任鏈模式架構原始碼模式
- Android原始碼設計模式-中介者模式Android原始碼設計模式
- Handler系列原始碼解析原始碼
- 一文帶你摸清設計模式之單例模式!設計模式單例
- 圖文詳解23種設計模式設計模式
- 【趣味設計模式系列】之【代理模式4--ASM框架解析】設計模式ASM框架
- 原始碼中的設計模式--工廠模式原始碼設計模式
- 原始碼中的設計模式--模板方法模式原始碼設計模式
- 設計模式(十四)——模板模式(SpringIOC原始碼分析)設計模式Spring原始碼
- 【圖解設計模式系列】23句話總結23種設計模式圖解設計模式
- js設計模式–命令模式JS設計模式
- Java設計模式——命令模式Java設計模式
- js設計模式--命令模式JS設計模式
- Python 設計模式-命令模式Python設計模式
- 設計模式-命令模式(Command)設計模式
- 設計模式之命令模式設計模式
- 設計模式之-命令模式設計模式
- AFNetworking原始碼解析系列(1)原始碼
- AFNetworking原始碼解析系列(2)原始碼
- 設計模式系列設計模式
- Android 原始碼設計模式解析與實戰 讀書筆記 5 工廠方法模式Android原始碼設計模式筆記