专栏首页波波烤鸭Java命令模式(Command)

Java命令模式(Command)

概述

  将一个请求封装为一个对象,从而可用不同的请求对客户进行参数化;对请求排队或记录日志,以及支持可撤销的操作,将”发出请求的对象”和”接收与执行这些请求的对象”分隔开来。

命令模式(Command)的参与者

序号

参与者

说明

1

Command

声明执行操作的接口

2

ConcreteCommand

将一个接收者对象绑定于一个动作, 调用接收者相应的操作,以实现Execute

3

Client

创建一个具体命令对象并设定它的接收者。

4

Invoker

要求该命令执行这个请求。

5

Receiver

知道如何实现与执行一个请求相关的操作。任何类都可能作为一个接收者。

相关的类图

具体实现

Receiver

/**
 * 真正的命令的执行者
 * @author 波波烤鸭
 * @email dengpbs@163.com
 *
 */
public class Receiver {
	public void action(){
		System.out.println("Receiver.action()");
	}
}

Command

/**
 * Command定义
 * @author 波波烤鸭
 * @email dengpbs@163.com
 *
 */
public interface Command {
	/**
	 * 这个方法是一个返回结果为空的方法。
	 * 实际项目中,可以根据需求设计多个不同的方法
	 */
	void execute();
}

/**
 * Command实现
 * @author 波波烤鸭
 * @email dengpbs@163.com
 *
 */
class ConcreteCommand implements Command {
	
	private Receiver receiver;	//命令的真正的执行者
	
	public ConcreteCommand(Receiver receiver) {
		super();
		this.receiver = receiver;
	}

	@Override
	public void execute() {
		//命令真正执行前或后,执行相关的处理!
		receiver.action();
	}
}

Invoke

/**
 * 调用者/发起者
 * @author 波波烤鸭
 * @email dengpbs@163.com
 *
 */
public class Invoke {
	// 也可以通过容器List<Command>容纳很多命令对象,
	// 进行批处理。数据库底层的事务管理就是类似的结构!
	private Command command;   
	
	public Invoke(Command command) {
		super();
		this.command = command;
	} 
	
	//业务方法 ,用于调用命令类的方法
	public void call(){
		command.execute();
	}	
}

Client

public static void main(String[] args) {
	Command c = new ConcreteCommand(new Receiver());
	Invoke i = new Invoke(c);
	i.call();
	//new Receiver().action();
}
Receiver.action()

开发中常见的场景:

  1. Struts2中,action的整个调用过程中就有命令模式。
  2. 数据库事务机制的底层实现
  3. 命令的撤销和恢复

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Hadoop之MapReduce02【自定义wordcount案例】

    用户4919348
  • SpringCloud-Eureka【服务案例】

      上篇文章我们介绍了Eureka的集群环境搭建,本文我们来通过Eureka作为注册中心来实现一个案例,案例结构如下

    用户4919348
  • SpringBoot整合Ehcache

      本文介绍下SpringBoot整合SpringDataJPA后加入缓存组件Ehcache的操作。

    用户4919348
  • Python opencv图像处理基础总结(五) 图像金字塔 图像梯度 Canny算法边缘提取

    图像金字塔是图像多尺度表达的一种,是一种以多分辨率来解释图像的有效但概念简单的结构。一幅图像的金字塔是一系列以金字塔形状排列的分辨率逐步降低,且来源于同一张原始...

    叶庭云
  • 单例模式

    小小明童鞋
  • 第七章:Trigger监听器和Job监听器

    监听器(listener)是你创建的对象,主要作用是接收和处理调度器回调的事件(event)。TriggerListener接收到与触发器(Trigger)相关...

    Throwable
  • 一篇文章学会PageFactory模式

    我们已经学习了Page Object设计模式,优势很明显,能更好的体现java的面向对象思想和封装特性。但同时也存在一些不足之处,那就是随着这种模式使用,随着元...

    软件测试君
  • 还在用Synchronized?Atomic你了解不?

    之前在学习的时候也看过AtomicInteger类很多次了,一直没有去做相关的笔记。现在遇到问题了,于是就过来写写笔记,并希望在学习的过程中解决掉问题。

    Java3y
  • python 中 functools 宝库下的 partial

    看起来好久没更新,再不更新估计手都生锈了。随便写点什么。看看日历,也算是新年第一篇。

    the5fire
  • 设计模式之命令模式

    命令模式在书本上是这样说的,将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,队请求排队或者记录请求日志,可以提供命令的撤销或者恢复功能。

    用户5166556

扫码关注云+社区

领取腾讯云代金券