命令模式:
将一个请求封装成 一个对象,从而是你可以不同的请求对客户 进行参数化:
对请求排队或记录请求日志,以及支持可撤销的操作。
/**
* 知道如何实施与执行一个请求相关地操作,任何类都可能作为一个接收者:具体地请求
* */
public class Receiver {
public void Action() {
System.out.println("执行请求");
}
}
/**
* 用来执行操作地接口:命令,目的是为了执行请求
* */
abstract class Command {
protected Receiver receiver;
public Command(Receiver receiver) {
this.receiver=receiver;
}
abstract public void Excute();
}
/**
* 将一个 接收者对象绑定于一个动作,调用接收者相应地操作,以实现Execute
* */
public class CCommand extends Command{
public CCommand(Receiver receiver) {
super(receiver);
// TODO Auto-generated constructor stub
}
@Override
public void Excute() {
// TODO Auto-generated method stub
receiver.Action();
}
}
/**
* 要求该命令执行这个请求 执行命令》》请求
*/
public class Invoker {
private Command command;
public void setCommand(Command command) {
this.command = command;
}
public void ExcuteCommand() {
command.Excute();
}
}
public class Invokers {
private List<Command> commands=new ArrayList<>();
// 增加请求
public void setOrder(Command command) {
if (command.toString().equals("hhh")) {
System.out.println("拒绝请求");
}
else {
commands.add(command);
System.out.println("增加请求");
}
}
// 取消请求
public void canceOrder(Command command) {
commands.remove(command);
System.out.println("取消请求");
}
// 通知
public void notifys() {
for (Command commandss : commands) {
commandss.Excute();
}
}
}
/**
* 客户端
* */
public class Test1 {
public static void main(String[] args) {
// 为了执行命令
Invoker invoker = new Invoker();
// 执行具体地请求
Receiver receiver = new Receiver();
// 为了执行具体地请求
Command cCommand = new CCommand(receiver);
invoker.setCommand(cCommand);
invoker.ExcuteCommand();
}
}