设计模式15-命令模式
1. 概念
将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化,对请求排队和记录请求日志,以及支持可撤销的操作。
2. 案例
package org.demo.command.demo01; /** * 将一个请求封装为一个对象, * 从而使你可用不同的请求对客户进行参数化; * 对请求排队或记录请求日志,以及支持可撤消的操作 * 1.Command 声明执行操作的接口。 2.ConcreteCommand 将一个接收者对象绑定于一个动作。 调用接收者相应的操作,以实现Execute。 3.Client 创建一个具体命令对象并设定它的接收者。 4.Invoker 要求该命令执行这个请求。 5.Receiver 知道如何实施与执行一个请求相关的操作。任何类都可能作为一个接收者。 */ class Receiver{ public void receive(){ System.out.println("知道如何实施与执行一个请求相关的操作。任何类都可能作为一个接收者"); } } abstract class Command{ protected Receiver receiver ; //指明命令的接受者 public Command(Receiver receiver){ this.receiver = receiver ; } public abstract void execute() ; } class CommandImpl extends Command{ public CommandImpl(Receiver receiver) { super(receiver); } public void execute() { //执行的命令 receiver.receive() ; } } class Invoker{ private Command command ; public void setCommand(Command command){ this.command = command ; } public void execute(){ command.execute() ; //调用命令的执行方法 命令再去调用接受者的方法 因此接受者可以动态创建 } } public class Demo01 { public static void main(String[] args) { Command command = new CommandImpl(new Receiver()) ; Invoker invoker = new Invoker() ; invoker.setCommand(command) ; invoker.execute() ; } }