设计模式之命令模式

    xiaoxiao2026-02-06  0

    设计模式目录 http://blog.csdn.net/fenglailea/article/details/52733435 风.fox

    命令模式 Method Invocation

    将“请求”封装成对象,以便使用不同的请求,队列或者日志来参数化其他对象。 命令模式也支持可以撤销操作。

    通用类图

    组成

    接受者角色 Receive 该角色就是干活的角色,命令传递到这里是应该被执行的。命令角色 Command 需要执行的所有命令都在这里声明调用者角色 Invoker 接收到命令,并执行命令。 命令模式比较简单,但是在项目中非常频繁地使用,因为它的封装性非常好,把请求方(Invoker)和执行方(Receive)分开了,扩展性也有很好的保障,通用代码比较简单。

    案例

    JAVA

    // 接受者角色 public abstract class Receive{ // 抽象接受者,定义每个接受者都必须完成的业务 public abstract void doSomething(); } //命令角色 public class ConcreteCommand1 extends Receive{ // 对哪个Receive类进行命令处理 private Receive receive; // 构造函数传递接受者 public ConcreteCommand1(Receive _receive){ this.receive=_receive; } // 必须实现一个命令 public void execute(){ // 业务处理 this.receive.doSomething(); } } public class ConcreteCommand2 extends Receive{ // 对哪个Receive类进行命令处理 private Receive receive; // 构造函数传递接受者 public ConcreteCommand2(Receive _receive){ this.receive=_receive; } // 必须实现一个命令 public void execute(){ // 业务处理 this.receive.doSomething(); } } //调用者角色 Invoker public class Invoker{ private Command command; // 受气包,接受命令 public void setCommand(Command _command){ this.command=_command; } //执行命令 public void action(){ this.command.execute(); } } //场景 public class Client{ public static void main(String[] args){ //首先声明调用者Invoker Invoker invoker=new Invoker(); // 定义接受者 Receiver receiver=new ConcreteReciver1(); // 定义一个发送给接受者的命令 Command command = new ConcreteCommand1(receiver); // 把命令交给调用者去执行 invoker.setCommand(command); invoker.action(); } }

    优点

    类间解耦 可扩展性 命令模式结合其他模式会更会优秀

    使用场景

    只要你认为是命令的地方就可以采用命令模式

    最新回复(0)