【命令模式】—— 请求与执行解耦

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Pro_Vinny/article/details/81713635

命令模式,将行为实现抽象成对象,并使其与请求者解耦,并能对行为进行纪录、撤销、事务等操作。

一、关键点

1)我们先看下这个模式的关键点:

行为与请求解耦:将一组行为抽象成对象,使之与请求者解耦开来,区别与之前请求者与行为的直接耦合,从而给控制的灵活变化带来了机会,并更容易对模块进行拓展;

灵活控制:支持对命令对象的排队、取消、修改、事务等功能,整个执行过程变得更加灵活。

2)我们再来看下它的类图关系:

Client:客户端角色。 

Invoker:请求着角色。

Command:命令的抽象接口。

ConcreteCommand:具体的命令实现对象。

Receiver:接受者角色,其实就是具体实施业务的角色。

二、实现

2.1 执行者Receiver

public class Receiver {

    public void handle() {
        /** do something */
    }
}

2.2 抽象命令接口Command

public interface Command {

    void execute();
}

2.3 具体命令对象 ConcreteCommand

public class ConcreteCommand implements Command {
    private Receiver mReceiver;

    public ConcreteCommand(Receiver receiver){
        this.mReceiver = receiver;
    }

    @Override
    public void execute() {
        mReceiver.handle();
    }
}

2.4  请求者色Invoker

public class Invoker {
    private Command mCommand;

    public Invoker(Command command) {
        mCommand = command;
    }

    public void execute() {
        mCommand.execute();
    }
}

2.5 客户端Client

public class Client {

    public static void main(String[] args) {
        Invoker invoker = new Invoker(new ConcreteCommand(new Receiver()));
        invoker.execute();
    }
}

 三、小结

3.1 解耦。这个模式的最大特点就是命令的请求与执行进行了解耦,增加了两者各自变化的可能性;

3.2 灵活。由于上述的解耦,让命令的执行变得更灵活,也丰富了功能,如记录、撤销、事务等;

3.2 开闭原则。在实际使用的过程就会发现,当执行更多命令时,能在基本不改变原来的功能上进行灵活的拓展,可维护性更高。

猜你喜欢

转载自blog.csdn.net/Pro_Vinny/article/details/81713635