命令模式

xiaoxiao2021-02-28  57

命令模式(Command pattern)

概念

一个请求封装成一个对象,从而使我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作,也成之为:动作Action模式,事务Transaction模式

结构

1:抽象命令类Command

2:具体命令类ConreteCommand

3:调用者/请求者Invoker

4:接受者Receiver

开发场景

1:Struts2中,action的整个调用过程中就有命令模式

2:数据库事务机制的底层实现

3:命令的撤销和恢复

案例(消息封装)

命令接收者

/* * 真正的命令执行者 */ public class Receiver { public void action(){ System.out.println("命令已经被我执行!"); } }

抽象命令接口

/* * 命令 */ public interface Command { void execute(); }

具体命令类

/* * 具体命令实现类 */ class ConcreteCommand implements Command{ //持有命令执行者的引用 private Receiver receiver; public ConcreteCommand(Receiver receiver) { super(); this.receiver = receiver; } public void execute() { //执行前可以做一些处理 receiver.action(); //执行后也可以做一些处理 } }

调用者

/* * 调用者,发起者 */ public class Invoke { private Command command; public Invoke(Command command) { super(); this.command = command; } //业务方法,调用命令类的方法 public void call(){ //执行前可以做一些处理 command.execute(); //执行后也可以做一些处理 } }

客户端测试

public class Client { public static void main(String[] args) { Command com = new ConcreteCommand(new Receiver()); Invoke invoke = new Invoke(com); invoke.call(); //直接调用,却不利于扩展 new Receiver().action(); } } console: 命令已经被我执行! 命令已经被我执行!

UML类图

转载请注明原文地址: https://www.6miu.com/read-2612993.html

最新回复(0)