命令模式(command)

定义:将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能. 优点:类间接耦合,可扩展性,命令模式结合其他模式会更优秀. 缺点:命令类会很膨胀.

1.1. 角色:

接受者角色:干活的角色,命令传递到这里应该被执行的. 命令角色:需要执行的所有命令都在这里声明 调用者角色:接收到命令,并执行命令.

1.2. 实现:

抽象命令类

public abstract class AbstractCommand {
    /** 定义一个子类全局共享变量 */
    protected final AbstractReceiver receiver;

    /**
     * @Description  实现类必须传入一个接收者
     */
    public AbstractCommand(AbstractReceiver receiver) {
        this.receiver = receiver;
    }
    /**  
     * @Description  每个命令类都必须有一个执行命令的方法  
     */
    public abstract void execute();
}

具体命令类

public class ConcreteCommand1 extends AbstractCommand {
    /**
     * @Description  设置默认接收者
     */
    public ConcreteCommand1() {
        super(new ConcreteReceiver1());
    }
    /**
     * @Description  构造函数传递接收者
     * @param receiver  接收者对象
     */
    public ConcreteCommand1(AbstractReceiver receiver) {
        super(receiver);
    }

    /**  
     * @Description  每个命令类必须实现执行命令方法
     */
    @Override
    public void execute() {
        // 业务逻辑
        this.receiver.doSomething();
    }
}

接收者

public class ConcreteReceiver1 extends AbstractReceiver {
    /**  
     * @Description  每个接收者都必须完成的业务逻辑 
     */
    @Override
    public void doSomething() {
        // 业务逻辑处理
        System.out.println("receiver1 is doing Something");
    }
}

调用者

public class Invoker {
    /** 需要执行的命令类 */
    private AbstractCommand command;


    /**  
     * @Description  设置命令类
     */
    public void setCommand(AbstractCommand command) {
       this.command = command; 
    }

    /**  
     * @Description  执行命令
     */
    public void action() {
        this.command.execute();
    }
}

results matching ""

    No results matching ""