命令模式
定义:将请求封装为对象,从而可以不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。
作用
1.设计一个命令队列
2.记录日志
3.允许接收请求的一方否决请求
4.容易地实现对请求的撤销和重做
5.方便增加具体命令类,具体操作类
命令模式的实现需要三部分:命令部分,通知部分,执行部分。
命令部分对应不同的请求,执行部分对应不同的命令,通知部分对命令进行收集,排队,撤销,通知执行。
命令模式是为了解决请求与执行部分的紧耦合,这不方便对请求做记录,排队,操作。
实现
命令部分
public abstract class Command {
protected Receiver receiver;
public Command(Receiver receiver){
this.receiver = receiver;
}
public abstract void execute();
}
public class DemoCommand1 extends Command{
public DemoCommand1(Receiver receiver) {
super(receiver);
}
@Override
public void execute() {
receiver.action();
}
}
操作部分
public abstract class Receiver {
public abstract void action();
}
public class DemoReceiver1 extends Receiver{
@Override
public void action() {
System.out.println("DemoReceiver1的行为");
}
}
通知部分
import java.util.ArrayList;
import java.util.List;
public class DemoNotify {
private List<Command> list = new ArrayList<>();
public void addCommand(Command command){
list.add(command);
}
public void executeAll(){
for (Command command : list) {
command.execute();
}
}
}
执行效果
public class Client {
public static void main(String[] args) {
DemoReceiver1 receiver = new DemoReceiver1();
DemoCommand1 command1 = new DemoCommand1(receiver);
DemoNotify notifier = new DemoNotify();
notifier.addCommand(command1);
notifier.executeAll();
}
}
?
|