一、 定义
命令模式(Command),将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。
二、 结构图

三、 示例代码(以烤肉店点餐为例)
package org.example.commandmodel;
public interface Command {
public void ExcuteCommand();
public void SetReceiver(Reciver rc);
}
package org.example.commandmodel;
public class Reciver {
public void ExcuteCommand(){
System.out.println("Excute the command");
}
}
package org.example.commandmodel;
public class KaocaiCommand implements Command {
private Reciver rc = null;
@Override
public void ExcuteCommand() {
if (rc != null)
rc.ExcuteCommand();
}
@Override
public void SetReceiver(Reciver rc) {
this.rc = rc;
}
}
package org.example.commandmodel;
public class KaorouCommand implements Command {
private Reciver rc = null;
@Override
public void ExcuteCommand() {
if (rc != null)
rc.ExcuteCommand();
}
@Override
public void SetReceiver(Reciver rc) {
this.rc = rc;
}
}
package org.example.commandmodel;
import java.util.ArrayList;
import java.util.List;
public class Invoke {
private List<Command> lc = new ArrayList<>();
public void addCommand(Command cm){
lc.add(cm);
}
public void removeCommand(Command cm){
lc.remove(cm);
}
public void ExcuteCommand(){
for (Command c:lc) {
c.ExcuteCommand();
}
}
}
package org.example.commandmodel;
public class Client {
public static void main(String[] args) {
Reciver rc = new Reciver();
KaorouCommand kc = new KaorouCommand();
kc.SetReceiver(rc);
KaocaiCommand kcc = new KaocaiCommand();
kcc.SetReceiver(rc);
Invoke iv = new Invoke();
iv.addCommand(kc);
iv.addCommand(kcc);
iv.ExcuteCommand();
iv.removeCommand(kcc);
iv.ExcuteCommand();
}
}

被折叠的 条评论
为什么被折叠?



