命令模式

UML图:

Command角色:

public abstract class Command {
    protected Receiver receiver;

    public Command(Receiver receiver) {
        this.receiver = receiver;
    }

    public void setReceiver(Receiver receiver) {
        this.receiver = receiver;
    }

    abstract void execute();
}

ConcreteCommand角色:

public class ConcreteCommand extends Command {

    public ConcreteCommand(Receiver receiver) {
        super(receiver);
    }

    @Override
    public void execute() {
        receiver.action();
    }
}

Receiver角色:

public interface Receiver {
    void action();
}

ConcreteReceiver角色:

public class ConcreteReceiver implements Receiver {
    @Override
    public void action() {
        System.out.println("executing one kind command");
    }
}

Invoker角色:封装命令请求

public class Invoker {
    private Command command;

    public Invoker(Command command) {
        this.command = command;
    }

    public void setCommand(Command command) {
        this.command = command;
    }

    public void call(){
        command.execute();
    }
}

Client角色:

public static void main(String[] args){
    Receiver receiver = new ConcreteReceiver();
    Command command = new ConcreteCommand(receiver);
    //command.execute();
    Invoker invoker = new Invoker(command);
    invoker.call();
}